מידע רשת

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 - קורא את הרשומה הבאה ממסד נתוני השירותים הפתוח; שלב כל לולאת איטרציה עם endservent

  • getservbyname - חיפוש חד־פעמי לפי שם שירות; אינו מתקיים אינטראקציה עם האיטרטור ש־endservent סוגר

  • getservbyport - חיפוש חד־פעמי לפי מספר פורט; אותה עצמאות מהאיטרטור

  • endprotoent - המקבילה למסד־נתוני־הפרוטוקולים, אותה צורה ואותם כללים

  • endhostent - המקבילה למסד־נתוני־המארחים