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

How Use Open System Call C



Οι κλήσεις συστήματος χρησιμοποιούνται στις διανομές Linux για να παρέχουν μια είσοδο στο λειτουργικό σύστημα Linux και τα προγράμματα. Το λειτουργικό σύστημα Linux χρησιμοποιεί τη βιβλιοθήκη Glibc για να υποστηρίζει κλήσεις συστήματος σε αυτό ενώ χρησιμοποιεί τη γλώσσα C. Υπάρχουν πολλοί περισσότεροι τρόποι χρήσης κλήσεων συστήματος επίσης. Σε αυτόν τον οδηγό άρθρου, θα συζητήσουμε την κλήση ανοιχτού συστήματος στο σύστημα Linux. Η κλήση συστήματος ανοίγματος χρησιμοποιήθηκε για να ανοίξει γρήγορα το αρχείο που καθορίζεται στη διαδρομή. Μας ενημέρωσε για τον περιγραφέα αρχείων ενός αρχείου που δημιουργήθηκε από τον χρήστη. Χρησιμοποιούμε το Ubuntu 20.04 για να πραγματοποιήσουμε κάποια πρακτική κλήση ανοικτού συστήματος.

Εγκατάσταση Βιβλιοθηκών

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







$ sudo apt install manpages-dev



Το αποτέλεσμα για την ολοκλήρωση της εγκατάστασης έχει δοθεί παρακάτω.







Τώρα θα ελέγξουμε για την κλήση ανοιχτού συστήματος χρησιμοποιώντας την εντολή man όπως παρακάτω.

$ man2Άνοιξε



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

Η παραπάνω σύνταξη δείχνει τις τρεις πρώτες γραμμές των απαραίτητων βιβλιοθηκών που πρέπει να προστεθούν για κλήσεις συστήματος. Υπάρχουν τρεις συντακτικές διαθέσιμες για την κλήση ανοιχτού συστήματος. Η πρώτη σύνταξη δείχνει το όνομα διαδρομής, το οποίο είναι το όνομα ενός αρχείου που πρέπει να ανοίξει. Η δεύτερη παράμετρος, σημαίες, δείχνει τη λειτουργία ενός αρχείου, π.χ., ανάγνωση ή εγγραφή. Η δεύτερη σύνταξη μπορεί να χρησιμοποιηθεί όταν το αρχείο δεν υπάρχει. Η λειτουργία παραμέτρου χρησιμοποιείται για την εμφάνιση των δικαιωμάτων στο αρχείο.

Τώρα ήρθε η ώρα να εγκαταστήσετε τον μεταγλωττιστή GCC για τον εντοπισμό σφαλμάτων κώδικα C στη διανομή Linux του Ubuntu 20.04. Για αυτό, εκτελέστε την παρακάτω οδηγία στο κέλυφος για να το κάνετε.

$ sudo apt εγκατάσταση gcc

Απαιτεί να πατήσετε Y για να συνεχίσετε την εγκατάσταση του μεταγλωττιστή GCC, διαφορετικά πατήστε το κουμπί n για να κλείσετε την εγκατάσταση. Πατήστε λοιπόν το κουμπί y και πατήστε Enter για να συνεχίσετε.

Το αποτέλεσμα για την ολοκλήρωση φαίνεται παρακάτω.

Παράδειγμα 01

Ας δούμε το πολύ απλό παράδειγμα μιας κλήσης ανοικτού συστήματος. Αρχικά, ανοίξτε το κέλυφος εντολών και δημιουργήστε ένα νέο αρχείο κειμένου test.txt χρησιμοποιώντας την απλή εντολή αφής ως εξής:

$αφήtest.txt

Προσθέστε κάποια δεδομένα σε αυτό με μη αυτόματο τρόπο. Μπορείτε να δείτε τα δεδομένα σε ένα αρχείο χρησιμοποιώντας την παρακάτω εντολή cat.

$Γάταtest.txt

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

$νανονέο.γ

Το παρακάτω αρχείο GNU nano θα ανοίξει. Πρέπει να πληκτρολογήσετε τον παρακάτω κωδικό γλώσσας C σε αυτόν. Μπορείτε να δείτε ότι έχουμε προσθέσει τα απαραίτητα πακέτα βιβλιοθήκης για να εκτελεστεί σωστά ο κωδικός C. Μετά από αυτό, ορίσαμε την κύρια συνάρτηση για εργασία σε μια κλήση ανοικτού συστήματος. Έχουμε δηλώσει δύο ακέραιες μεταβλητές. Η μεταβλητή n χρησιμοποιείται για τον υπολογισμό των τιμών buffer και η fd χρησιμοποιείται για τον περιγραφέα αρχείων. Έχουμε δηλώσει τον πίνακα buffer τύπου χαρακτήρα ως buf με μέγεθος 50. Η κλήση ανοιχτού συστήματος έχει χρησιμοποιηθεί για να διαβάσει το περιεχόμενο από το αρχείο test.txt και να το επιστρέψει στον περιγραφέα αρχείων. Το O_RDONLY έχει χρησιμοποιηθεί για λόγους ανάγνωσης. Η επόμενη γραμμή δείχνει την κλήση συστήματος ανάγνωσης για να συλλέξει τα 10 byte από το buffer και να τα επιστρέψει στον ακέραιο n. Επίσης, η εντολή εγγραφής έχει χρησιμοποιηθεί για την εγγραφή του περιεχομένου ή των δεδομένων προσωρινής αποθήκευσης στον περιγραφέα αρχείων, η οποία είναι η οθόνη εξόδου Στην περίπτωσή μας αυτή τη στιγμή. Αποθηκεύστε αυτό το αρχείο χρησιμοποιώντας Ctrl+S και κλείστε το χρησιμοποιώντας την εντολή Ctrl+X.

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

intκύριος()
{
intν,fd?
απανθρακώνωμπουφ[πενήντα]?
fd=Άνοιξε(δοκιμή.κείμενο,O_RDONLY)?
ν=ανάγνωση(fd,μπουφ, 10)?
γράφω(1 ,μπουφ, 10)?

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

$gccνέο.γ

Τώρα ήρθε η ώρα να ελέγξετε την έξοδο για τον κωδικό C για μια ανοιχτή κλήση συστήματος. Ας χρησιμοποιήσουμε την παρακάτω εντολή a.out στο κέλυφος. Η έξοδος εμφανίζει τα 10 byte από το περιεχόμενο ενός αρχείου test.txt.

$./προς το.έξω

Ας πάρουμε ένα άλλο παράδειγμα για να γράψουμε τα περιεχόμενα ενός αρχείου σε άλλο αρχείο χρησιμοποιώντας μια κλήση ανοικτού συστήματος. Για να δημιουργήσετε ένα νέο αρχείο C χρησιμοποιώντας την εντολή nano όπως παρακάτω.

$ nano νέο.ντο

Πάρτε λοιπόν τον ίδιο κώδικα με μια μικρή αλλαγή σε αυτόν. Ορίσαμε έναν άλλο περιγραφέα αρχείων στον κώδικα ως fd1. Όλος ο κωδικός είναι ο ίδιος εκτός από μία επιπλέον γραμμή. Η δεύτερη τελευταία γραμμή του κώδικα έχει χρησιμοποιήσει την κλήση ανοιχτού συστήματος για να δημιουργήσει ένα νέο αρχείο με όνομα στόχος χρησιμοποιώντας το O_CREAT και τη λειτουργία, μόνο για εγγραφή ως O_WRONLY. 0642 δείχνει τα προνόμια που έχουν εκχωρηθεί σε αυτό το αρχείο. Και το αρχείο έχει επιστραφεί σε νέο περιγραφέα αρχείων. Η επόμενη γραμμή έχει δείξει μια εντολή για την εγγραφή των byte περιεχομένου στο buffer σύμφωνα με τον περιγραφέα αρχείων. Αποθηκεύστε το αρχείο και κλείστε το.

Εκτελέστε την εντολή μεταγλώττισης gcc για να διορθώσετε το αρχείο γλώσσας C.

$ gcc νέο.ντο

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

$./προς το.έξω

Ας ελέγξουμε τα δεδομένα ενός στόχου αρχείου χρησιμοποιώντας την εντολή cat. Η έξοδος δείχνει ότι το αρχείο έχει 20 byte μέσα.

στόχος $ cat

συμπέρασμα

Στο παραπάνω σεμινάριο, σας εξηγήσαμε να χρησιμοποιήσετε μια ανοιχτή κλήση συστήματος σε γλώσσα C χρησιμοποιώντας τον μεταγλωττιστή gcc. Με τη βοήθεια διαφορετικών παραδειγμάτων που εξηγούνται σε αυτόν τον οδηγό θα σας οδηγήσει στην υλοποίηση του επιθυμητού προγράμματος.