קידוד עם מזלג ו- exec על ידי דוגמא ב- c

Coding With Fork Exec Example C



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

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







תנאים מוקדמים

כדי לבצע כל תוכנית c במערכת הלינוקס שלך, עלינו להתקין עליה כמה תנאים מוקדמים. עבור למסוף באמצעות שיטת הקיצור Ctrl+Alt+T. כעת כתוב את הפקודות הבאות להתקנת דפי האדם.



$סודומַתְאִיםלהתקיןmanpages-dev



הוא יתקין את כל הדפים המתאימים.





כדי להתקדם, כדי להריץ תוכנית ב- Linux, עליך להתקין מהדר קוד. זה משמש לחיבור הקוד ולביצועו. לשם כך, נתקין במאגרנו אתרי מאגרי GCC.

$סודומַתְאִיםלהתקיןGCC



קידוד עם מנהל מערכת ב- c

מכיוון שהתקנו את דפי האדם בלינוקס, נשתמש בפקודה הבאה כדי לראות את התיאור לגבי exec. תחביר המדגם העיקרי הוא כדלקמן:

תחביר

מנהל(שם הנתיב/קוֹבֶץ, argv);

כאן השתמשנו בכותרת unistd.h מכיוון שהיא מכילה את כל המידע על משפחות של פונקציית exec.

$איש מנהל

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

דוגמא: כעת, נתקדם הלאה, נתאר את הפונקציונליות של exec בעזרת דוגמה. ניקח פונקציה אחת של exec להדגים את פעולתה, שהיא execv. ראשית, ניצור שני קבצים עם הסיומת של .c. לאחר יצירתם, נכתוב בהם קודים מתאימים ונבצע אותם כדי לראות את התוצאה.

שקול שם קובץ sample4.c. אנא פתח אותו והשתמש בקוד הבא. בקוד זה, השתמשנו ב- execv באופן מסוים המובא להלן.

הוצאה לפועל(./sample4copy, args);

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

דוגמה 4. ג

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

Sample4copy.c

כאשר אנו קוראים לפונקציית exec (), תמונת התהליך משתנה. להלן התמונה המצוטטת להלן מציגה את הקוד של sample4copy.c.

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

ניתן להשיג את הפלט של הקודים המתאימים באמצעות הפקודות הבאות.

$ GCC – o sample4 sample4.c
$ GCC –o sample4copy sample4copy.c
$./מדגם 4

כפי שתיארנו קודם לכן, מילת ה- GCC משמשת לעריכת הקוד, ולאחר עריכת הקוד מבוצע בהצלחה.

על פי התמונה, קובץ ה- PID של sample4.c מוצג תחילה כפי שהוא הוכרז לפני שיחת מנהל המערכת. לאחר שנקראת הפונקציה exec (), שני הצהרות ההדפסה של הקובץ sample4copy.c מתבצעות במקום שבו getpid () משמש להשגת מזהה התהליך.

קידוד עם מזלג ב- c

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

תחביר:

מזלג Pid_t(בָּטֵל);

אנו יכולים להשתמש בדף האדם לעזרה בשימוש

$אישמזלג

דוגמא: כעת שקלו דוגמה על ידי יצירת קובץ sample3.c. נזין את הקוד בתוך הקובץ. על פי הקוד, הגדרנו את סטטוס המזלג כ- forank.

דוגמה 3. ג

השתמשנו בהצהרת if-else ליישום התנאי. פקודות הדפסה פשוטות מוכרזות כאן כדי לסייע בהבנת מושג המזלג (). Forkrank מוכרז תחילה כ 0 ולאחר מכן -1. עם מזלג (), ישנם כעת שני תהליכים שעובדים במקביל. ניתן להשיג פלט באמצעות אותו קוד, כפי ששימש לעיל בדוגמה exec.

$ GCC –o מדגם 3. ג
$./מדגם 3

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

מערכת מזלג ו- Exec מתקשרת יחד

כאן ניקח שני קבצים בשם sample1.c ו- sample2.c. ראשית, פתח את הקובץ sampl1.c וכתוב את הקוד המצורף למטה בתמונה. השתמשנו כאן במערכת המזלג (); כאשר תהליך הילד יוצר, p יוקצה עם 0. תוך שימוש ב- exec system-call, הדוגמא1.c יוחלף ב- sample2.c.

דוגמה 1. ג

דוגמה 2. ג

בדומה לדוגמאות שנדונו לעיל, קובץ sample2 יכיל בתוכו את הצהרות printf. בדוגמא 1.c, פקודת ההדפסה הראשונה מבוצעת תחילה, ולאחר מכן נקראת פונקציית המזלג, כאשר p == 0, לאחר מכן חלק הצאצא מבוצע וקובץ sample2.c יופעל. הפלט יכיל GCC לעריכת שני הקבצים. כאן מזהה הורה sample1.c ומזהה sample2.c שונים מכיוון שהם הורים וילדים.

סיכום

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