אתה נמצא כאן יסודות השפה  »  יצירת תהליכונים  »  פונקצית ()system

פונקצית ()system

הדרך הפשוטה ביותר להריץ תכנית בתהליכון חדש היא ע"י שימוש ב- system(). הפונקציה מתחילה תהליכון חדש (בסביבת shell חדשה שאינה קשורה לסביבה שבה רצה תכנית האם), ומריצה בו את הפקודה. כשהפקודה מסתיימת,  system() מחזירה את הערך המוחזר של הפקודה שבוצעה. יש לשים לב שהערך של פקודה שהסתימה באופן תקין הוא 0.

דוגמא לשימוש פשוט בפונקציה  system() - הצגת המסלול של ספרית העבודה הנכחית
 (current working directory)

#!/usr/local/bin/perl

system("pwd");
/*קריאה לפקודת pwd באמצעות system*/

קלט/פלט ושגיאות

ניתוב של קלט, פלט ושגיאות מתבצע לפי ההגדרות של תכנית האם (ההגדרות של  STDOUT, STDIN, STDERR). בגלל שהפקודה מתבצעת תחת סביבת  shell ניתן להשתמש באופרטורים לניתוב פלט/קלט של ה  shell.
לדוגמא:

#!/usr/local/bin/perl

system("who > users_list")
/*ביצוע פקודת who והעברת הפלט ל users_list*/
&&
/*אם הפקודה מחזירה ערך שונה מאפס, סימן שלא הצליחה*/
die "cannot create users_list";
/*יציאה מהתכנית עם הודעה*/

הרצת מספר פקודות

הארגומנט של הפונקציה  system() יכול להכיל מספר פקודות. הפקודות יופרדו ע"י ; (נקודה-פסיק) או תו "שורה חדשה".

הרצה של תהליכון ברקע

הוספה של & בסוף מחרוזת הארגומנט של הפונקציה  system() תגרום לכך שהתהליכון החדש (עם הפקודה, או רצף הפקודות) ירוץ ברקע, בדיוק כמו ש & משפיע על פקודה בסביבת  shell.
שימוש ב & מגביל את השימוש בפונקציה  system() משום שהערך המוחזר מציין האם התהליכון שוגר בהצלחה, אבל לא מוסר שום מידע לגבי הצלחת הפקודות.
דוגמא - קריאה לפקודות  date, who וניתוב הפלט לתוך users_list.log:

#!/usr/local/bin/perl

$logfile = "users_list\.log";
/*שימוש במשתנה לאיחסון שם הקובץ*/

system ("(date; who) >$logfile & ");
/*ביצוע רצף הפקודות ברקע*/









להוספת תגובה, אנא התחברו לדרכונט.