Πώς να χρησιμοποιήσετε την εγγραφή κλήσης συστήματος στο C

How Use Write System Call C



Η κλήση συστήματος χρησιμεύει ως η κύρια πύλη μεταξύ προγραμμάτων και πυρήνα λειτουργικού συστήματος Linux. Παρόλο που σίγουρα θα χρειαζόταν να έχετε μια κλήση συστήματος καθ 'όλη τη διάρκεια της σταδιοδρομίας προγραμματισμού σας C, είτε στοχεύετε σε εξαιρετική παραγωγικότητα είτε σε συγκεκριμένο στυλ χαρακτηριστικών, το αποθετήριο Glibc ή άλλες τυπικές βιβλιοθήκες που βρίσκονται σε δημοφιλείς διανομές Linux θα αρκούν για τη συντριπτική πλειοψηφία των απαιτήσεις. Σε αυτόν τον οδηγό, θα δημιουργήσουμε μια ιδέα σχετικά με την κλήση εγγραφής συστήματος σε γλώσσα C.

Σύνταξη:

#περιλαμβάνω

ssize_tγράφω(int fd, const άκυρο*buf, size_t count)?

Σε αυτήν την παραπάνω σύνταξη, η πρώτη γραμμή δείχνει τη βιβλιοθήκη για κλήσεις συστήματος. Στη δεύτερη γραμμή, το fd σημαίνει περιγραφέας αρχείου που είναι πράγματι ένας αριθμός που καθορίζει το ανοιχτό αρχείο μιας διαδικασίας. Η λέξη -κλειδί *buf σημαίνει buffer. Αυτό περιέχει οποιαδήποτε δεδομένα σε αυτό. Το επόμενο είναι το μέτρημα. Είναι ο αριθμός των byte που πρέπει να γραφτούν σε έναν περιγραφέα αρχείων από το buffer.







Εγκατάσταση προϋποθέσεων:

Για να εκτελέσετε οποιονδήποτε κώδικα γλώσσας C, πρέπει πρώτα να εγκαταστήσετε ορισμένα πακέτα στη διανομή Linux. Εάν θέλετε να δείτε περισσότερες πληροφορίες σχετικά με την εγγραφή κλήσης συστήματος, πρέπει να εγκαταστήσετε το πακέτο manpages-dev για να το κάνετε αυτό. Για να ανοίξετε το τερματικό χρησιμοποιώντας το πλήκτρο συντόμευσης Ctrl+Alt+T. Αφού το ανοίξετε, γράψτε την παρακάτω εντολή apt install, ακολουθούμενη από τη λέξη-κλειδί manpages-dev για να εγκαταστήσετε manpages.



$sudoκατάλληλοςεγκαθιστώmanpages-dev



Θα χρειαστεί λίγος χρόνος για να εγκαταστήσετε τις διαχειρίσεις. Περιμένετε να ολοκληρωθεί.





Μετά την εγκατάσταση, μπορείτε να δείτε τις πρόσθετες πληροφορίες σχετικά με την εγγραφή κλήσης συστήματος μέσω της παρακάτω εντολής man στο κέλυφος.



$άνδρας 2 γράφω

Η ανδρική σελίδα εξόδου για την εντολή εγγραφής δίνεται παρακάτω. Μπορείτε να διαβάσετε τις πληροφορίες σχετικά με αυτό. Πατήστε q για να κλείσετε το εγχειρίδιο.

Τώρα ήρθε η ώρα να εγκαταστήσετε το πακέτο Gcc στο σύστημα Linux σας για να λειτουργήσει στη γλώσσα C. Για αυτό, ανοίξτε το κέλυφος και γράψτε την παρακάτω εντολή apt install ακολουθούμενη από τη λέξη -κλειδί gcc.

$sudoκατάλληλοςεγκαθιστώ gcc

Εν τω μεταξύ, κατά τη διάρκεια της εγκατάστασης, μπορεί να σας ζητήσει να επιβεβαιώσετε αυτήν την ενέργεια της εγκατάστασης πατώντας y για να συνεχίσετε και n για να την σταματήσετε. Έτσι, πατήστε το πλήκτρο y και πατήστε το πλήκτρο Enter.

Θα εγκατασταθεί στο σύστημά σας μέσα σε λίγα λεπτά και οι τελευταίες γραμμές εξόδου θα είναι όπως φαίνονται στο παρακάτω στιγμιότυπο.

Παραδείγματα:

Ας έχουμε μερικά παραδείγματα κλήσης συστήματος εγγραφής στη διανομή Linux μας. Επομένως, ανοίξτε το κέλυφος της γραμμής εντολών και δημιουργήστε ένα νέο αρχείο C σε αυτό με την επέκταση dot c. Πρέπει να χρησιμοποιήσετε την παρακάτω εντολή nano για γρήγορη δημιουργία και άνοιγμα. Του δώσαμε ένα όνομα ως new.c.

$νανονέο.γ

Το παρακάτω παράθυρο θα ανοίξει. Τώρα πρέπει να γράψετε τον επικολλημένο κώδικα σε αυτό το αρχείο. Σε αυτόν τον κώδικα, έχουμε συμπεριλάβει πρώτα μια βιβλιοθήκη unistd.h. Στη συνέχεια, δημιουργήσαμε την κύρια συνάρτηση και μέσα σε αυτήν τη συνάρτηση, δημιουργήσαμε μια κλήση συστήματος εγγραφής. Σε αυτήν την κλήση συστήματος, η πρώτη παράμετρος είναι ο περιγραφέας αρχείων. Σε αυτήν την περίπτωση, ο ακέραιος 1 αντιπροσωπεύει την οθόνη της συσκευής εξόδου και είναι σταθερή. Έτσι, η έξοδός μας θα εμφανιστεί στην οθόνη. Η δεύτερη παράμετρος δείχνει τα δεδομένα του buffer. Μπορείτε να προσθέσετε οτιδήποτε σε αυτό. Και η τελευταία παράμετρος δείχνει τον αριθμό μέτρησης για τα δεδομένα που δίνονται στην παράμετρο buffer. Όπως έχουμε αναφέρει το 5 ως τον αριθμό καταμέτρησης, θα εμφανίζει μόνο τα πρώτα 5 byte των δεδομένων buffer και θα αγνοεί τα bytes που έχουν απομείνει. Αποθηκεύστε αυτόν τον κωδικό χρησιμοποιώντας το πλήκτρο συντόμευσης Ctrl+S και βγείτε από αυτό το αρχείο χρησιμοποιώντας την εντολή Ctrl+X.

#περιλαμβάνω

Int main()

{Γράφω(1Άκσα Γιασίν5)?}

Τώρα στο τερματικό, δοκιμάστε την παρακάτω εντολή gcc για να μεταγλωττίσετε αυτόν τον πρόσφατα δημιουργημένο κώδικα με όνομα αρχείου.

$gccνέο.γ

Ας ελέγξουμε αυτόν τον κώδικα χρησιμοποιώντας το προεπιλεγμένο αρχείο a.out που δημιουργήθηκε την ώρα εκτέλεσης. Έτσι, δοκιμάστε την παρακάτω εντολή a.out για να ελέγξετε την έξοδο της εγγραφής κλήσης συστήματος. Πρέπει να το χρησιμοποιήσουμε με ./ για να επιλέξουμε το αρχείο από τον τρέχοντα κατάλογο.

$Το/a.out

Η έξοδος που μπορείτε να δείτε έχει εμφανίσει μόνο τη λέξη Aqsa λόγω του αριθμού αριθμού 5.

Ας αλλάξουμε λίγο τον κωδικό μας. Αλλάξαμε τον αριθμό μέτρησης σε 11 επειδή έχουμε συνολικά 11 byte στα δεδομένα buffer Aqsa Yasin. Αυτή τη φορά, λοιπόν, η έξοδος θα εμφανίσει ολόκληρα τα byte δεδομένων συμβολοσειράς Aqsa Yasin. Αποθηκεύστε αυτό το αρχείο χρησιμοποιώντας Ctrl+S και κλείστε χρησιμοποιώντας το πλήκτρο συντόμευσης Ctrl+X.

Ας μεταγλωττίσουμε τον ενημερωμένο κώδικα χρησιμοποιώντας τον πρόσφατα εγκατεστημένο μεταγλωττιστή gcc για διανομή Linux. Δοκιμάστε την ίδια εντολή gcc μαζί με το όνομα ενός αρχείου με το new.c.

$gccνέο.γ

Τώρα εμφανίστε την έξοδο του ίδιου κώδικα χρησιμοποιώντας την προηγούμενη εντολή a.out όπως παρακάτω. Η έξοδος δείχνει την πλήρη συμβολοσειρά Aqsa Yasin του buffer.

$Το/a.out

Ας δούμε πώς λειτουργεί ο κώδικας όταν παίρνουμε τον αριθμό μέτρησης μεγαλύτερο από τον συνολικό αριθμό byte που περιέχει τα δεδομένα buffer. Έτσι, χρησιμοποιούμε τον αριθμό ως 30. Αποθηκεύστε και κλείστε το αρχείο.

Συγκεντρώστε το ίδιο ενημερωμένο αρχείο χρησιμοποιώντας την εντολή gcc όπως παρακάτω.

$gccνέο.γ

Τώρα εκτελέστε το αρχείο χρησιμοποιώντας την εντολή a.out και η έξοδος θα εμφανίσει τα δεδομένα του buffer καθώς και κάποια τιμή σκουπιδιών μαζί του, όπως εμφανίζεται στην έξοδο στιγμιότυπου παρακάτω. $ ./A.out

Μπορείτε επίσης να ελέγξετε τον συνολικό αριθμό byte που έχουν εγγραφεί στο αρχείο χρησιμοποιώντας τον παρακάτω κώδικα στο ίδιο αρχείο.

Συγκεντρώστε τον κώδικα με οδηγίες gcc.

$gccνέο.γ

Η έξοδος εμφανίζει τον συνολικό αριθμό byte, συμπεριλαμβανομένων των δεδομένων buffer και της διακοπής γραμμής, χρησιμοποιώντας την εντολή a.out.

$Το/a.out

Συμπέρασμα:

Σε αυτό το σεμινάριο, έχουμε αναπτύξει την έννοια της χρήσης της κλήσης συστήματος Γράψτε στο C. Δοκιμάστε όλα τα παραδείγματα για να κατανοήσετε την ιδέα της εγγραφής κλήσης συστήματος χρησιμοποιώντας αυτό το άρθρο.