מידע רשת

endprotoent#

סוגר את מסד נתוני הפרוטוקולים לאחר איטרציה.

endprotoent הוא המסיים של שלישיית האיטרציה getprotoent / setprotoent / endprotoent שסורקת את מסד נתוני הפרוטוקולים של המערכת (בדרך כלל /etc/protocols). הוא משחרר כל מטפל או מצב שספריית ה־C של המערכת השאירה פתוחים לאיטרציה. קוראים לו לאחר שהסריקה הסדרתית הסתיימה; getprotobyname ו־getprotobynumber אינם זקוקים לו - הם פותחים וסוגרים את מסד הנתונים בכל קריאה.

לא מקבל ארגומנטים, לא מחזיר דבר שימושי. זוהי עטיפה דקה מעל קריאת endprotoent(3) של המערכת.

תקציר#

endprotoent

מה מקבלים בחזרה#

אין ערך החזרה משמעותי. קריאתו בהקשר רשימה או סקלר מחזירה את הרשימה הריקה / שווה־ערך ל־undef; דבר שתרצה לבדוק. ערכו הוא תופעת־הלוואי של סגירת מסד נתוני הפרוטוקולים.

דוגמאות#

סריקת כל פרוטוקול, ואז סגירת מסד הנתונים:

setprotoent(1);                         # 1 = keep the file open between calls
while (my @p = getprotoent()) {
    my ($name, $aliases, $proto) = @p;
    print "$proto\t$name\n";
}
endprotoent();

קיצור באמצע־הסריקה - endprotoent עדיין סוגר נקייה:

setprotoent(0);
while (my @p = getprotoent()) {
    last if $p[0] eq 'tcp';
}
endprotoent();

בשילוב עם חיפוש ישיר, endprotoent מיותר - חיפושים לפי שם ולפי מספר מנהלים את המצב שלהם:

my @tcp = getprotobyname('tcp');        # no endprotoent needed

מקרי קצה#

  • קריאה ללא setprotoent / getprotoent קודם: לא מזיקה. קריאת המערכת אידמפוטנטית; סגירת מסד נתונים כבר־סגור היא no-op בכל פלטפורמה נתמכת.

  • אין ארגומנטים מתקבלים: endprotoent $x היא שגיאת תחביר - לפונקציה המובנית יש אריות אפס.

  • לא reentrant: מסד נתוני הפרוטוקולים הוא משאב יחיד גלובלי בתוך ספריית ה־C. שתי איטרציות מקבילות באותו תהליך דורכות זו על מצבה של זו. השתמש בסריקות לכל־thread או לכל־תת־תהליך אם דרושה לך מקבילות.

  • מוזרויות פלטפורמה: ההתנהגות היא מה ש־endprotoent(3) של המערכת המארחת עושה. ראה perlport לרשימת הפלטפורמות שבהן שגרות מסד־הנתונים־של־הרשת מתפצלות או נעדרות לחלוטין.

  • מוחלף בעקרון על פלטפורמות ללא /etc/protocols: על מערכות שבהן לספריית ה־C אין מסד נתוני פרוטוקולים, הקריאה היא no-op ולא שגיאה.

הבדלים מ־upstream#

תואם מלא ל־upstream Perl 5.42.

ראו גם#

  • setprotoent - פותח את מסד נתוני הפרוטוקולים ובאופן אופציונלי שומר אותו פתוח בין קריאות getprotoent; שלב עם endprotoent כדי לתחום סריקה

  • getprotoent - קורא את הרשומה הבאה בזמן איטרציה; מניע את הלולאה ש־endprotoent מסיים

  • getprotobyname - חיפוש חד־פעמי לפי שם פרוטוקול; עצמאי, ללא צורך ב־endprotoent

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

  • endservent - המסיים המקביל למסד נתוני השירותים; אותו ניב, טבלה שונה

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