Τι είναι μια κλήση συστήματος στο Linux και πώς λειτουργεί με παραδείγματα

What Is System Call Linux



Μια κλήση συστήματος είναι μια συνάρτηση που επιτρέπει σε μια διαδικασία να επικοινωνεί με τον πυρήνα του Linux. Είναι απλώς ένας προγραμματικός τρόπος για ένα πρόγραμμα υπολογιστή να παραγγείλει μια εγκατάσταση από τον πυρήνα του λειτουργικού συστήματος. Οι κλήσεις συστήματος εκθέτουν τους πόρους του λειτουργικού συστήματος σε προγράμματα χρηστών μέσω ενός API (διεπαφή προγραμματισμού εφαρμογών). Οι κλήσεις συστήματος μπορούν να έχουν πρόσβαση μόνο στο πλαίσιο πυρήνα. Απαιτούνται κλήσεις συστήματος για όλες τις υπηρεσίες που χρειάζονται πόρους.

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







Wafer Thin Wrapper:

Οι κλήσεις συστήματος Linux δεν αποδίδονται ρητά στον πυρήνα σε ορισμένα προγράμματα. Σχεδόν όλα τα προγράμματα χρησιμοποιούν τη βασική βιβλιοθήκη C και προσφέρουν ένα ελαφρύ αλλά βασικό περιτύλιγμα στις κλήσεις συστήματος Linux. Στη συνέχεια, το αποθετήριο παρέχει τη συνοδευτική κλήση μηχανής Linux αφού διασφαλίσει ότι οι παράμετροι χαρακτηριστικών μεταφράζονται στα σωστά μητρώα επεξεργαστή. Κάθε φορά που το περιτύλιγμα λαμβάνει δεδομένα από την κλήση συστήματος, τα αναλύει και τα συνεισφέρει στο πρόγραμμα με σαφήνεια. Οποιαδήποτε λειτουργία μηχανικής αλληλεπίδρασης σε ένα πρόγραμμα μετατρέπεται τελικά σε κλήση συστήματος. Λοιπόν, ας ρίξουμε μια ματιά σε μερικά από αυτά. Υπάρχει ένας μακρύς κατάλογος κλήσεων συστήματος Linux που μπορούμε να χρησιμοποιήσουμε στο σύστημά μας Linux. Ακολουθεί η λίστα με μερικές κοινές και κυρίως χρησιμοποιούμενες κλήσεις συστήματος Linux.



  • Ανοιξε
  • Κλείσε
  • Εκτέλεση
  • Γράφω
  • Ανάγνωση
  • Lseek
  • Επιλέγω

Ας συζητήσουμε μερικές από τις κλήσεις συστήματος Linux χρησιμοποιώντας τη γλώσσα C στο άρθρο μας για να το χειριστούμε.



Άνοιγμα κλήσης συστήματος:

Μπορούμε να χρησιμοποιήσουμε την κλήση συστήματος Open στην διανομή Linux μας για να ανοίξουμε γρήγορα το έγγραφο, το οποίο θα καθορίσουμε στον κώδικα της γλώσσας C. Εκκινήστε πρώτα το τερματικό εντολών. Μπορείτε να χρησιμοποιήσετε τη συντόμευση Ctrl+Alt+T. Ας υποθέσουμε ότι έχετε ένα αρχείο κειμένου test.txt στον αρχικό κατάλογο και περιέχει κάποιο περιεχόμενο σε αυτό. Έτσι, στην αρχή, πρέπει να δημιουργήσετε ένα νέο όνομα αρχείου τύπου new.c στο τερματικό μέσω του επεξεργαστή nano. Επομένως, δοκιμάστε την απλή παρακάτω οδηγίες νανο.





$νανονέο.γ

Τώρα, έχει ξεκινήσει ο επεξεργαστής Nano. Πληκτρολογήστε τον παρακάτω κώδικα που εμφανίζεται σε αυτό. Έχουμε δύο περιγραφείς αρχείων στον κώδικα. Και τα δύο αρχεία μπορούν να ανοίξουν χρησιμοποιώντας την ανοιχτή κλήση συστήματος. Ο πρώτος περιγραφέας περιέχει μια κλήση ανάγνωσης και ο δεύτερος περιέχει τη λειτουργία εγγραφής. Η πρώτη ανοιχτή κλήση είναι το άνοιγμα του αρχείου κειμένου test.txt και η αποθήκευση του περιεχομένου του σε περιγραφικό αρχείου fd. Η δεύτερη ανοιχτή κλήση συστήματος δημιουργεί ένα αρχείο με όνομα στόχος. Ο στόχος εγγράφου έχει επιστραφεί σε έναν περιγραφέα αρχείων fd1. Η εντολή εγγραφής χρησιμοποιείται για τη μεταγραφή των byte δεδομένων στο buffer. Πατήστε Ctrl+S για να αποθηκεύσετε τον κώδικα και πατήστε το πλήκτρο συντόμευσης Ctrl+X για έξοδο από το αρχείο.



Εκτελέστε την εντολή μεταγλώττισης gcc για να μεταγλωττίσετε αυτόν τον κωδικό C.

$gccνέο.γ

Ας εκτελέσουμε τον κώδικα χρησιμοποιώντας το απλό ερώτημα a.out στο κέλυφος ως εξής:

$Το/a.out

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

$Γάταστόχος

Εκτέλεση κλήσης συστήματος:

Η κλήση συστήματος exec απενεργοποιείται για την εκτέλεση ενός αρχείου που βρίσκεται υπό επεξεργασία αυτήν τη στιγμή. Το προηγούμενο εκτελέσιμο αρχείο αντικαθίσταται και το τρέχον αρχείο λειτουργεί όποτε καλείται exec. Χρησιμοποιώντας μια κλήση συστήματος exec, μπορούμε να υποθέσουμε ότι με αυτόν τον τρόπο θα αντικατασταθεί το παλιό έγγραφο ή εφαρμογή στον βρόχο με ένα νέο. Νέο λογισμικό χρησιμοποιείται για να παρακάμψει ολόκληρο το υλικό της διαδικασίας. Το έγγραφο του οποίου ο τίτλος δίνεται στη δήλωση κάθε φορά που η κλήση exec () αντικαθίσταται από την ενότητα πληροφοριών χρήστη που εκτελεί την κλήση συστήματος exec (). Ανοίξτε λοιπόν το τερματικό εντολών και, χρησιμοποιώντας τον επεξεργαστή nano, δημιουργήστε ένα νέο αρχείο τύπου C ως εξής:

$νανοέκφρ. γ

Ο επεξεργαστής έχει ανοίξει τώρα. Γράψτε ολόκληρο τον παρακάτω κωδικό γλώσσας C σε αυτό. Υπάρχουν τρεις κύριες βιβλιοθήκες που περιλαμβάνονται σε αυτό. Μετά από αυτό, η κύρια λειτουργία έχει τεκμηριωθεί. Η δήλωση εκτύπωσης εμφανίζει τα δεδομένα συμβολοσειράς και το αναγνωριστικό διεργασίας του αρχείου exp.c. Η συνάρτηση getpid () χρησιμοποιήθηκε για το σκοπό αυτό. Στη συνέχεια, έχουμε έναν πίνακα τύπου χαρακτήρων με ορισμένες τιμές. Η κλήση συστήματος exec χρησιμοποιήθηκε για να λάβει ως όρισμα το όνομα αρχείου και τον παραπάνω πίνακα μιας γραμμής. Τώρα θα γίνει επεξεργασία του αρχείου hello.c. Μετά από αυτό, μια άλλη δήλωση εκτύπωσης έρχεται μέχρι στιγμής, αλλά δεν θα εκτελεστεί ποτέ. Πατήστε Ctrl+S για να αποθηκεύσετε αυτό το αρχείο. Πατήστε Ctrl+X για έξοδο.

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

$νανογεια.γ

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

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

$gcc–O exp exp.c

$gcc–O γεια σας γεια.γ

Όταν εκτελούμε το αρχείο exp.c, θα εξάγει την πρώτη δήλωση εκτύπωσης από το αρχείο exp.c και τις δύο γραμμές εκτύπωσης από το αρχείο hello.c.

$Το/έκφρ

Συμπέρασμα:

Έχουμε επεξεργαστεί ολόκληρη την έννοια των κλήσεων συστήματος Linux και πώς μπορούν να χρησιμοποιηθούν στο σύστημά σας Linux. Χρησιμοποιήσαμε το Ubuntu 20.04 κατά την εφαρμογή αυτής της ιδέας.