פונקצית ()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 & ");/* | ביצוע רצף הפקודות ברקע | */ |
להוספת תגובה, אנא התחברו לדרכונט.