פונקציית Fstat ב-C

Pwnqzyyt Fstat B C



הפונקציה fstat() קוראת למערכת להחזיר את המידע (לגבי קובץ כלשהו) שתלוי במתאר של אותו קובץ. פונקציה זו משיגה את המידע עבור הקובץ המשויך לתיאור הקובץ הידוע גם בשם 'fildes' ולאחר מכן כותבת מידע זה במיקום הזיכרון אליו מצביע המאגר. סוג ההחזר של פונקציה זו הוא מספר שלם. זה מחזיר את הערך '0' אם התוכנית מבוצעת בהצלחה. אחרת, הוא מחזיר '-1' לפונקציה במקרה של ביצוע כושל. שגיאת הביצוע של פונקציה זו יכולה לנבוע מסיבות ספציפיות כמו אם ל-fildes של הפונקציה יש מתאר לא חוקי עבור הקובץ, אם שגיאת הקריאה עבור קלט ופלט מתרחשת מהקובץ, ואם מיקום הזיכרון (מבנה) שבו המאגר מצביע לכתוב את פרטי הקובץ אין מספיק זיכרון מוקצה לגודל הקובץ.

תהליך

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







תחביר

השיטה להכריז על הפונקציה fstat() המאפשרת גישה של התוכנית למידע הקובץ מוזכרת בשורה הבאה:



$ #include
$ int מדינה ( int פילדס , struct סטט * buf ) ;

בכל פעם שעלינו לקרוא לפונקציה בתוכנית שלנו, עלינו לייבא תחילה את קבצי הכותרת התומכים בפונקציה זו כ-'sys/stat.h'. סוג ההחזרה של הפונקציה הוא תמיד 'int' והפרמטר כולל 'fildes' עם סוג הנתונים 'int'. Fildes הוא מתאר לקובץ שאנו רוצים לדעת את המידע עליו. פרמטר נוסף שניתן לפונקציה הוא המצביע 'buf'. זהו מצביע 'struct stat' שמצביע לעבר המבנה שבו אנו רוצים לאחסן את הנתונים על הקובץ. זהו תיאור קצר של פרמטרי הקלט עבור הפונקציה fstat() .



דוגמא

אנו משתמשים בתיאור שהוזכר בעבר ומפעילים תוכנית כדי לקבל את המידע על כל קובץ / קובץ ספציפי דרך התוכנית שלנו. אנו כותבים תוכנית זו במהדר Microsoft Visual Studio C לביצוע. אנו מתחילים עם הדוגמה על ידי יצירת פרויקט תחילה ולאחר מכן הוספתו למאגרי C ב-Visual Studio. כדי להוסיף את הפרויקט לקבצי C, אנו כוללים את ה-'.c' עם שם הפרויקט ומוסיפים אותו לקובץ המקור של הפרויקט. השלב הבא לאחר יצירת הפרויקט הוא לקרוא לכל הספריות הנדרשות עבור הפונקציות שבהן אנו עשויים להשתמש בהמשך התוכנית. מכיוון שאנו מיישמים את הדוגמה עבור הפונקציה fstat() במאמר זה, עלינו לכלול את קובץ הכותרת 'sys/ stat.h '. לקבלת מידע על הקובץ, עלינו לדעת את סוג ההתקן שבו קיים הקובץ. כדי לדעת את סוג הנתונים עבור המכשיר, אנו כוללים את הכותרת 'סוג. h' בתוכנית.





פרטי הקובץ חייבים לכלול את הזמן שבו הקובץ נפתח לאחרונה ואת השינוי שנעשה בו. כדי לגשת לפונקציות שיחות זמן אלו, אנו מוסיפים את קובץ הכותרת 'זמנים. h' וה-'fcntl. h' עבור פונקציות הרשאת הקובץ. הכותרת האחרונה 'stdio. קובץ h' כלול גם בתוכנית כדי לקרוא לשיטות printf() ו- scanf() בתוכנית. קובצי הכותרות שדיברנו עליהם להיכלל בתוכנית הם כדלקמן:

$ #include
$ #include
$ #include
$ #include
$ #include

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



לאחר מכן, אנו מגדירים משתנה נוסף בשם 'file_descriptor' עם סוג הנתונים כ'מספר שלם'. בתנאי 'אם', אנו מבקשים רשות לפעולות הקריאה והכתיבה של הקובץ אם הוא קיים, תוך העברת ה-'S_IWUSR' ושם המערך לפונקציה 'create()' שקוראת להרשאות עבור הקובץ אם זה קיים או ליצור קובץ חדש אחרת. אנו מעבירים את הפונקציה create() הזו ל-'if condition' שקובע אם ערך הפונקציה create() קטן מאפס ואז יוצר שגיאה שיש ליצור את הקובץ. אם ה-fstat() עם פרמטרים כמו 'file_descriptor' ו-'information' ו-'כתובת המיקום שבו מאוחסן מידע הקובץ' לא שווה לאפס, נציג את הערך המוחזר fstat() שהוא המידע של הקובץ . ואנחנו מדפיסים את המידע בצורה של תכונות, למשל. מזהה מכשיר בו מאוחסן הקובץ, מספר ה-Inode של המכשיר, מצב ההגנה של הקובץ, מזהה המשתמש, מזהה הקבוצה ומספר הקישור (טופס קשיח).

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

#include
#include
#include
#include
#include

רָאשִׁי ( ) {
לְהַשְׁחִיר מַעֲרָך [ ] = 'amp.file' ;
struct מידע סטטיסטי ;
int מתאר קובץ ;
אם ( ( מתאר קובץ = עָשׂוּי ( מַעֲרָך , S_IWUSR ) ) < 0 )
טעות ( שגיאה 'creat()' ) ;
אַחֵר {
אם ( מדינה ( מתאר קובץ , & מֵידָע ) != 0 )
טעות ( 'fstat() שגיאה' ) ;
אַחֵר {
מעמיד ( ערכי 'fstat():' ) ;
printf ( ' inode: %d \n ' , ( int ) מידע. st_ino ) ;
printf ( ' device_id: %d \n ' , ( int ) מידע. st_dev ) ;
printf ( מצב המכשיר: %08x \n ' , מידע. st_mode ) ;
printf ( ' no_of_hard_links: %d \n ' , מידע. st_nlink ) ;
printf ( ' u_id: %d \n ' , ( int ) מידע. st_uid ) ;
printf ( ' g_id: %d \n ' , ( int ) מידע. st_gid ) ;
}
סגור ( מתאר קובץ ) ;
לבטל את הקישור ( מַעֲרָך ) ;
}
}

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

סיכום

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