Rust Std:: OS בלינוקס

Rust Std Os Blynwqs



ב-Rust, מודול std::os מספק הפשטה על הפונקציונליות של מערכת ההפעלה. זה מאפשר לנו ליצור אינטראקציה עם מערכת ההפעלה הבסיסית לעבודה עם משתני הסביבה, פעולות מערכת הקבצים, ניהול תהליכים ועוד.

בדוגמה זו, נסקור כמה פעולות בסיסיות שתוכל לבצע ב-Unix באמצעות מודול Rust std::os.







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



מערכת הפעלה חלודה בלינוקס

בלינוקס, נוכל לגשת לפונקציות והסוגים הספציפיים ל-Unix שמסופקים על ידי מודול std::os::unix, תת-מודול של מודול std::os ב-Rust.



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





הבה נסקור כמה API ופעולות בסיסיות שאנו יכולים לבצע על מערכת לינוקס ממודול זה.

גישה למשתני הסביבה

אנו יכולים לגשת למשתני הסביבה באמצעות מודול std::env. לדוגמה, std::env::var('PATH') מאחזר את הערך של משתנה הסביבה PATH.



שקול את התוכנית הבאה לדוגמה:

השתמש ב-std::env;
השתמש ב-std::ffi::OsString;

fn יד ( ) {
// גישה למשתנה סביבה ספציפי
אם לתת בסדר ( ערך ) = env::var ( 'WAYLAND_DISPLAY' ) {
println ! ( 'WAYLAND_DISPLAY={}' , ערך ) ;
}

// חזור על כל משתני הסביבה
ל ( ערך מפתח ) ב env::wars_us ( ) {
לתת key_string = key.to_string_lossy ( ) ;
לתת value_string = value.to_string_lossy ( ) ;
println ! ( '{}:{}' , מחרוזת_מפתח, מחרוזת_ערך ) ;
}

// גישה למשתנה סביבה ספציפי כפי ש an ` OsString `
אם לתת כמה ( ערך ) = env::var_us ( 'HOSTTYPE' ) {
// להמיר ` OsString ` אל א ` חוּט ` אם נָחוּץ
אם לתת כמה ( value_str ) = value.to_str ( ) {
println ! ( 'HOSTTYPE={}' , value_str ) ;
}
}
}


בדוגמה הנתונה, אנו מתחילים בייבוא ​​המודולים הדרושים. במקרה זה, אנו מעוניינים ב-std::env וב-std::ff::OsString.

כדי לגשת למשתנה סביבה ספציפי, אנו יכולים להשתמש בפונקציה env::var ולהעביר את שם הערך שברצוננו להביא. במקרה זה, נקבל את הערך של המשתנה WAYLAND_DISPLAY.

הפונקציה מחזירה את ערך המשתנה כסוג תוצאה.

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

אנו יכולים גם לגשת למשתני הסביבה הספציפיים באמצעות הפונקציה env::var_os. זה אמור להחזיר סוג אותו נוכל להמיר למחרוזת באמצעות הפונקציה to_str().

הפלט המתקבל הוא כדלקמן:

WAYLAND_DISPLAY =wayland- 0
HOSTTYPE =x86_64

פעולות FS באמצעות מודול מערכת ההפעלה

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

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

השתמש ב-std::fs;

fn יד ( ) {
// לקרוא קוֹבֶץ
אם לתת בסדר ( תוכן ) = fs::read_to_string ( '/home/debian/.bashrc' ) {
println ! ( 'bashrc: {}' , תוכן ) ;
}

// צור ספרייה חדשה
אם לתת לִטְעוֹת ( לִטְעוֹת ) = fs::create_dir ( '/home/debian/new_dir' ) {
eprintln ! ( 'נכשל ביצירת הספרייה: {}' , טעות ) ;
}

// הסר את א קוֹבֶץ
אם לתת לִטְעוֹת ( לִטְעוֹת ) = fs::remove_file ( '/home/debian/remove_me.txt' ) {
eprintln ! ( 'הסרת הקובץ נכשלה: {}' , טעות ) ;
}
}


בדוגמה הנתונה, אנו מדגימים כיצד אנו יכולים לקרוא את התוכן של קובץ באמצעות שיטת fs::read_to_string() . השיטה לוקחת את הנתיב לקובץ היעד ומחזירה את תוכן הקובץ כמחרוזת.

אנחנו יכולים גם ליצור ספרייה חדשה באמצעות הפונקציה fs::create_dir() ולהעביר את הנתיב לספריית היעד כפרמטר.

לבסוף, נוכל להסיר קובץ ספציפי באמצעות הפונקציה fs::remove_file() ולהעביר את קובץ היעד כפרמטר.

הערה: הדוגמאות המסופקות הן כמה דוגמאות בסיסיות כיצד לבצע את פעולות מערכת הקבצים ב-Linux באמצעות מודול std::fs. Rust מספקת אוסף מקיף של שיטות ופונקציות המודגמות כאן. עיין בתיעוד למידע נוסף.

ניהול תהליכים באמצעות מודול מערכת ההפעלה

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

קח את הקוד לדוגמה הבא:

השתמש ב-std::process:: { פקודה, יְצִיאָה } ;

fn יד ( ) {
// הפעל את ls פקודה
לתת פלט = Command::new ( 'ls' )
.arg ( '-ה' )
.תְפוּקָה ( )
.לְצַפּוֹת ( 'נכשל בביצוע הפקודה' ) ;

אם output.status.success ( ) {
לתת stdout = String::from_utf8_lossy ( & output.stdout ) ;
println ! ( 'פלט פקודה: \n {}' , סטדאוט ) ;
} אַחֵר {
לתת stderr = String::from_utf8_lossy ( & output.stderr ) ;
eprintln ! ( 'הפקודה נכשלה: \n {}' , סטדרר ) ;
יְצִיאָה ( 1 ) ;
}
}


בדוגמה הנתונה, אנו מתחילים בייבוא ​​המודולים הנדרשים. במקרה זה, אנו זקוקים לשיטות 'פקודה' ו'יציאה' מתת-מודול std::process.

לאחר מכן אנו משתמשים בפונקציה Command::new() כדי להפעיל את הפקודה 'ls' ולהעביר את הארגומנטים לפקודה.

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

סיכום

בדקנו כיצד להשתמש בפונקציות ובשיטות השונות הניתנות על ידי מודול std::os ותת-מודולים כדי לבצע מספר פעולות במערכות דומות ל-Linux ו-Unix. זכור שמודול std::os הוא מודול נרחב המכיל אוסף רחב יותר של תכונות מאלה המודגמות במדריך זה.