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- διαβάζει την επόμενη εγγραφή κατά την επανάληψη· οδηγεί τον βρόχο που τερματίζει ηendprotoentgetprotobyname- αναζήτηση μίας εκτέλεσης κατά όνομα πρωτοκόλλου· αυτοτελής, δεν χρειάζεταιendprotoentgetprotobynumber- αναζήτηση μίας εκτέλεσης κατά αριθμό πρωτοκόλλου· ίδια ανεξαρτησία από την τριάδα επανάληψηςendservent- ο ανάλογος τερματιστής για τη βάση δεδομένων υπηρεσιών· ίδιο ιδίωμα, διαφορετικός πίνακαςendhostent- ο ανάλογος τερματιστής για τη βάση δεδομένων υπολογιστών