02-02-2012, 13:30
|
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
|
|
חבר מתאריך: 25.10.01
הודעות: 42,775
|
|
מה אני אגיד לך, העברית של מי שניסח את השאלות האלה, לוקה בחסר, בלשון המעטה.
א. אכן כך, וכבר כתבתי זאת בתגובתי הקודמת בשעה 7:24 - מילים אחרונות בהודעה.
ב. כן, זה אפשרי. יצירת קובץ ריק לא תופסת מקום בשטח הפנוי במערכת הקבצים, ולכן, אפשרית גם כשאין כזה. היא רק מייצרת inode, וכיוון שהמיקום של ה inode-ים מוקצה מראש, אין בעייה.
אגב, ב. היא סיבה נפוצה מאוד ל"קובצי לוג שלא מתמלאים בהודעות". תוכנה מנסה לפתוח קובץ לוג ולכתוב אליו - הפתיחה - מצליחה - הקובץ נוצר - ולכאורה אין שום בעייה (של הרשאות למשל), ואתה גם מצפה שייכתב משהו ללוג - אבל מערכת הקבצים מלאה ולכן הוא נשאר בגודל 0. לעתים גם הולכת לאיבוד קונפיגורציה בגלל תופעה זו - כשתוכנה מנסה לעדכן קובץ קונפיגורציה, ואין מקום, הוא עלול להתאפס והמידע המקורי מושמד. הפתרון, כמתכנת, להמנע מדבר כזה, הוא ליצור קובץ קונפיגורציה חדש, בשם אחר, אקראי, לוודא שנכתבו כל הבתים שנתבקשו להיכתב, לסגור את הקובץ, ורק אחרי שכל זה הצליח, להשתמש בפונקצית המערכת rename() כדי לשנות לשם הקובץ המקורי, פעולה שהיא אטומית (או שהיא מצליחה לחלוטין, או שהיא נכשלת לחלוטין ולא קורה כלום, והאפליקציה תהיה מודעת)
|