מהי שיחת מערכת בלינוקס וכיצד היא פועלת עם דוגמאות

What Is System Call Linux



קריאת מערכת היא פונקציה המאפשרת לתהליך לתקשר עם גרעין הלינוקס. זוהי רק דרך פרוגרמטית לתוכנת מחשב להזמין מתקן מהגרעין של מערכת ההפעלה. שיחות מערכת חושפות את משאבי מערכת ההפעלה לתוכניות משתמש באמצעות ממשק API (ממשק תכנות אפליקציות). שיחות מערכת יכולות לגשת רק למסגרת הליבה. יש צורך בשיחות מערכת לכל השירותים הזקוקים למשאבים.

ליבת לינוקס היא תוכנה קניינית הנטענת ופועלת במכשיר בשלב הפחות פוטנציאלי. תפקידו הוא לארגן את כל מה שקורה במכונה, החל מהמקלדת, כונן הדיסק ואירועי הרשת ועד מתן פרוסות זמן לביצוע במקביל של תוכניות שונות. הפרדת התוכנה והחומרה יוצרת בועה מאובטחת המשפרת את ההגנה והאמינות. יישומים חסרי זכויות אינם מסוגלים להגיע לאחסון של תוכניות אחרות, ואם אחת נכשלת, הגרעין עוצר את התהליך כך שהוא לא יפגע במערכת כולה.







עטיפת דק ופרוסות:

שיחות מערכת לינוקס אינן מועברות במפורש לגרעין בתוכניות מסוימות. כמעט כל התוכניות משתמשות בספריית C הבסיסית ומציעות מעטפת קלה אך חיונית על שיחות מערכת לינוקס. המאגר מספק לאחר מכן את שיחת מכונת הלינוקס הנלווית לאחר שהבטיח כי פרמטרי התכונה מתורגמים לרשומות המעבד הנכונות. בכל פעם שהעטיפה מקבלת נתונים משיחת המערכת, היא מנתחת אותם ותורמת אותם לתוכנית בצורה ברורה. כל פעולה אינטראקטיבית במכונה בתוכנית הופכת בסופו של דבר לשיחת מערכת. אז בואו נסתכל על כמה מהם. יש רשימה ארוכה של שיחות מערכת לינוקס בהן אנו יכולים להשתמש במערכת הלינוקס שלנו. להלן רשימת כמה שיחות מערכת Linux נפוצות ובעיקר בשימוש.



  • לִפְתוֹחַ
  • סגור
  • מנהל
  • לִכתוֹב
  • לקרוא
  • לסק
  • בחר

בואו נדון בכמה משיחות מערכת לינוקס המשתמשות בשפת C במאמר שלנו כדי להתמקד בזה.



פתיחת שיחת מערכת:

אנו יכולים להשתמש בשיחת המערכת הפתוחה בהפצת לינוקס שלנו כדי לפתוח במהירות את המסמך, אותו נציין בקוד שפת C שלנו. הפעל תחילה את מסוף הפקודה. אתה יכול להשתמש בקיצור Ctrl+Alt+T. נניח שיש לך קובץ טקסט test.txt בספריית הבית, והוא מכיל בתוכו תוכן כלשהו. אז בהתחלה, עליך ליצור שם קובץ חדש מסוג new.c במסוף באמצעות עורך ננו. לכן, נסה את הוראת הננו הפשוטה להלן.





$ננוחדש. ג

כעת, עורך ננו הושק. הקלד בו את הקוד המוצג למטה. יש לנו שני תיאורי קבצים בקוד. ניתן לפתוח את שני הקבצים באמצעות שיחת המערכת הפתוחה. המתאר הראשון מכיל קריאת קריאה, והשני מכיל את פונקציית הכתיבה. השיחה הפתוחה הראשונה היא פתיחת קובץ הטקסט test.txt ושמירת תוכנו במתאר הקבצים fd. קריאת המערכת הפתוחה השנייה יוצרת קובץ בשם יעד. יעד המסמך הוחזר למתאר קובץ fd1. הוראת הכתיבה משמשת לתמלול בתים של הנתונים במאגר. הקש על Ctrl+S כדי לשמור את הקוד ולחץ על מקש הקיצור Ctrl+X כדי לצאת מהקובץ.



הפעל את הוראת הידור gcc כדי לאסוף קוד C זה.

$gccחדש. ג

בואו נבצע את הקוד באמצעות שאילתת a.out הפשוטה במעטפת כדלקמן:

$./א.אאוט

נתוני הפלט הועברו ליעד הקובץ. בואו לבדוק את קובץ היעד באמצעות שאילתת החתול. מסך הפלט מציג את נתוני 20 התווים בקובץ היעד.

$חתוליַעַד

שיחת מערכת Exec:

קריאת מערכת ה- exec נדחית להפעלת קובץ שעובד כעת. קובץ ההפעלה לשעבר מוחלף, והקובץ הנוכחי מופעל בכל פעם שקוראים ל- exec. על ידי שימוש בשיחת מערכת exec, אנו עשויים להניח כי פעולה זו תחליף את המסמך או היישום הישן בלולאה במסמך חדש. תוכנה חדשה משמשת לביטול החומר של כל התהליך. המסמך שכותרתו ניתנת בהצהרה בכל פעם שקורא ל- exec () מוחלף בסעיף פרטי המשתמש שמפעיל את קריאת המערכת (). אז פתח את מסוף הפקודות, ועורך ננו, צור קובץ מסוג C חדש כדלקמן:

$ננוexp.c

העורך נפתח כעת. כתוב בו את כל קוד השפה למטה C. שלוש ספריות עיקריות כלולות בה. לאחר מכן, הפונקציה העיקרית יצאה מיידית. הצהרת ההדפסה מציגה את נתוני המחרוזת ואת מזהה התהליך של קובץ exp.c. הפונקציה getpid () שימשה למטרה זו. אז יש לנו מערך סוג תווים עם כמה ערכים בו. שיחת המערכת exec שימשה כדי לקחת את שם הקובץ ואת השורה אחת מעל המערך כארגומנט. כעת הקובץ hello.c יעובד. לאחר מכן, הצהרת הדפסה נוספת מגיעה עד כה, אך היא לעולם לא תתבצע. הקש Ctrl+S כדי לשמור קובץ זה. הקש Ctrl+X כדי לצאת.

עכשיו הגיע הזמן ליצור קובץ c נוסף, hello.c באמצעות עורך הננו. השתמש בשאילתה שלהלן בקליפה לשם כך.

$ננושלום. ג

כתוב בו את הקוד שלהלן. קוד זה מכיל שני הצהרות הדפסה בפונקציה הראשית. הראשון הוא רק הדפסת מחרוזת הנתונה בו, והשנייה היא הדפסת המחרוזת תוך אחזור מזהה התהליך של הקובץ הנמצא בשימוש כרגע, שהוא hello.c.

בואו להרכיב את שני הקבצים בזה אחר זה באמצעות gcc.

$gcc–O exp exp.c

$gcc–או שלום שלום.ג

כאשר אנו מבצעים את קובץ exp.c, הוא יפיק את הצהרת ההדפסה הראשונה מהקובץ exp.c ואת שתי קווי ההדפסה מהקובץ hello.c.

$./exp

סיכום:

פרטנו על כל הרעיון של שיחות מערכת לינוקס וכיצד ניתן להשתמש בהן במערכת הלינוקס שלך. השתמשנו באובונטו 20.04 בעת יישום הרעיון הזה.