Πληροφορίες δικτύου

endprotoent#

Κλείνει τη βάση πρωτοκόλλων μετά την επανάληψη.

Η endprotoent είναι ο τερματιστής της τριάδας επανάληψης getprotoent / setprotoent / endprotoent που διασχίζει τη βάση πρωτοκόλλων του συστήματος (συνήθως /etc/protocols). Απελευθερώνει όποιο handle ή κατάσταση κρατούσε ανοιχτή η C library του συστήματος για την επανάληψη. Την καλείτε αφότου ολοκληρωθεί η ακολουθιακή διάσχιση· οι 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: ακίνδυνο. Η κλήση συστήματος είναι idempotent· το κλείσιμο μιας ήδη κλειστής βάσης είναι no-op σε κάθε υποστηριζόμενη πλατφόρμα.

  • Δεν δέχεται ορίσματα: το endprotoent $x είναι συντακτικό σφάλμα - η ενσωματωμένη συνάρτηση έχει μηδενική πληθικότητα.

  • Μη επανεισόδιμη: η βάση πρωτοκόλλων είναι ένας μοναδικός καθολικός πόρος μέσα στη C library. Δύο ταυτόχρονες επαναλήψεις στην ίδια διεργασία πατούν η μία την κατάσταση της άλλης. Χρησιμοποιήστε διασχίσεις ανά νήμα ή ανά υποδιεργασία αν χρειάζεστε παραλληλισμό.

  • Ιδιορρυθμίες πλατφόρμας: η συμπεριφορά είναι ό,τι κάνει η endprotoent(3) του συστήματος που φιλοξενεί. Δείτε το perlport για τη λίστα πλατφορμών όπου οι ρουτίνες της βάσης δικτύου αποκλίνουν ή απουσιάζουν εντελώς.

  • Στελεχωμένη με stub σε πλατφόρμες χωρίς /etc/protocols: σε συστήματα όπου η C library δεν έχει βάση πρωτοκόλλων, η κλήση είναι no-op αντί για σφάλμα.

Διαφορές από το upstream#

Πλήρως συμβατό με το upstream Perl 5.42.

Δείτε επίσης#

  • setprotoent - ανοίγει τη βάση πρωτοκόλλων και προαιρετικά την κρατά ανοιχτή κατά τις κλήσεις getprotoent· συνδυάστε με την endprotoent για να οριοθετήσετε μια διάσχιση

  • getprotoent - διαβάζει την επόμενη εγγραφή κατά την επανάληψη· οδηγεί τον βρόχο που τερματίζει η endprotoent

  • getprotobyname - αναζήτηση μίας εκτέλεσης κατά όνομα πρωτοκόλλου· αυτοτελής, δεν χρειάζεται endprotoent

  • getprotobynumber - αναζήτηση μίας εκτέλεσης κατά αριθμό πρωτοκόλλου· ίδια ανεξαρτησία από την τριάδα επανάληψης

  • endservent - ο ανάλογος τερματιστής για τη βάση δεδομένων υπηρεσιών· ίδιο ιδίωμα, διαφορετικός πίνακας

  • endhostent - ο ανάλογος τερματιστής για τη βάση δεδομένων υπολογιστών