endservent#
סוגר את מסד נתוני השירותים לאחר סריקה עם getservent.
endservent הוא חצי הפירוק של שלישיית האיטרציה של מסד־נתוני־השירותים. לאחר ש־setservent פותח את מסד הנתונים (בדרך כלל /etc/services ב־Linux) ורצף של קריאות getservent סורק אותו רשומה אחר רשומה, endservent משחרר את המטפל שמתחת וכל מצב במאגר שספריית ה־C מחזיקה. הוא עוטף את קריאת POSIX endservent(3) אחד־לאחד.
תקציר#
endservent;
endservent();
מה מקבלים בחזרה#
דבר שימושי. הפונקציה נקראת לתופעת־הלוואי שלה; היא אינה מחזירה ערך משמעותי. אל תבדוק את ערך ההחזרה.
מצב גלובלי שהוא נוגע בו#
איטרטור מסד־נתוני־השירותים הכלל־מערכתי שנפתח על־ידי
setserventאו באופן מובלע על־ידי הקריאה הראשונה ל־getservent/getservbyname/getservbyport.endserventסוגר את אותו איטרטור.$!אינו נקבע באופן משמעותי על־ידי קריאה זו; חוזה POSIX ל־endservent(3)אינו מגדיר ערך החזרת שגיאה.
דוגמאות#
משולב עם setservent ו־getservent למניית כל רשומה ב־/etc/services:
setservent 0;
while (my @e = getservent) {
last unless @e;
my ($name, $aliases, $port, $proto) = @e;
print "$name/$proto = $port\n";
}
endservent;
סגירת סריקה מוקדם. מסד הנתונים נפתח באופן מובלע על־ידי getservent הראשון; endservent הוא עדיין הדרך הנכונה לשחרר אותו:
while (my @e = getservent) {
last if $e[0] eq 'http';
}
endservent;
ניקוי הגנתי סביב בלוק שעלול להשאיר את האיטרטור פתוח. לא מזיק כשאין איטרציה בעיצומה:
eval {
setservent 1;
scan_services();
1;
} or do {
endservent; # always release the handle
die $@;
};
endservent;
מקרי קצה#
קריאה ללא
setserventאוgetserventקודמים אינה מזיקה. קריאת ה־C שמתחת סובלת סגירת no-op.קריאה פעמיים אינה מזיקה מאותה סיבה.
endserventחוזר ונשנה אינו מדווח שגיאה.אינו משפיע על פונקציות חיפוש לפי שם ופורט -
getservbynameו־getservbyportפותחות וסוגרות את המטפלים קצרי־החיים שלהן ואינן מושפעות ממצב האיטרטור ש־endserventמנהל.ללא prototype, ללא ארגומנטים.
endservent $xהיא שגיאת זמן־הידור. השתמש ב־endservent;אוendservent();.לא נייד מעבר למערכות דמויות־Unix. על פלטפורמות שבהן לספריית ה־C חסר
endservent(3), הקריאה זורקתendservent not implemented.
הבדלים מ־upstream#
תואם מלא ל־upstream Perl 5.42.
ראו גם#
setservent- פותח את מסד נתוני השירותים, ועםSTAYOPENשונה־מאפס, שומר את המטפל בין חיפושים עוקביםgetservent- קורא את הרשומה הבאה ממסד נתוני השירותים הפתוח; שלב כל לולאת איטרציה עםendserventgetservbyname- חיפוש חד־פעמי לפי שם שירות; אינו מתקיים אינטראקציה עם האיטרטור ש־endserventסוגרgetservbyport- חיפוש חד־פעמי לפי מספר פורט; אותה עצמאות מהאיטרטורendprotoent- המקבילה למסד־נתוני־הפרוטוקולים, אותה צורה ואותם כלליםendhostent- המקבילה למסד־נתוני־המארחים