דף הבית » איך ל » למה אני לא יכול לשנות את השימוש ב- Windows קבצים כמו שאני יכול ב- Linux ו- OS X?

    למה אני לא יכול לשנות את השימוש ב- Windows קבצים כמו שאני יכול ב- Linux ו- OS X?


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

    מפגש השאלות והתשובות של היום מגיע אלינו באדיבות SuperUser - חלוקה מחודשת של Stack Exchange, קיבוץ מונחה על ידי הקהילה של אתרי אינטרנט של Q & A.

    השאלה

    SuperUser הקורא ..midget רוצה לדעת למה לינוקס ו- Windows לטפל קבצים בשימוש שונה:

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

    אז מה קורה מאחורי הקלעים ומונע ממנו למחוק דברים בחלונות כמו שהוא יכול בלינוקס?

    התשובה

    תורמים SuperUser לשפוך קצת אור על המצב עבור. נדהם כותב:

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

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

    דויד שוורץ מרחיב את הרעיון ומדגיש כיצד הדברים צריכים להיות אידיאליים וכיצד הם בפועל:

    ברירת מחדל של Windows לנעילת קבצים אוטומטית. ברירת מחדל UNIXes ידנית, שיתוף קבצים נעילה. בשני המקרים, ברירות המחדל יכול להיות overriden, אבל בשני המקרים הם בדרך כלל לא.

    הרבה קוד הישן של Windows משתמש C / C + + API (פונקציות כמו fopen) ולא API יליד (פונקציות כמו CreateFile). C / C + + API נותן לך שום דרך לציין כיצד נעילה חובה יפעל, כך שאתה מקבל את ברירות המחדל. ברירת המחדל "מצב המניות" נוטה לאסור על פעולות "סותרות". אם אתה פותח קובץ לכתיבה, כותב מניחים כי הוא מתנגש, גם אם אתה אף פעם לא ממש כותב לקובץ. כנ"ל עבור שינוי שם.

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

    אז אם הקוד משתמש בממשק ה- API של C / C +, או משתמש בממשק ה- API המקורי ללא מחשבה ספציפית על בעיות אלה, הם יפסיקו למנוע את הפעולה המקסימלית של פעולות אפשריות עבור כל קובץ שנפתח, ולא יוכלו לפתוח קובץ, אלא אם כן כל פעולה אפשרית יכול לבצע על זה פעם נפתחה היא unconflicted.

    לדעתי, שיטת Windows יעבוד הרבה יותר טוב מאשר בשיטת UNIX אם כל תוכנית בחרה מצבי המניות שלה לפתוח מצבים בחוכמה מטופלת במקרים כישלון. השיטה UNIX, לעומת זאת, עובד טוב יותר אם הקוד לא טורחים לחשוב על נושאים אלה. למרבה הצער, הבסיסי C / C + + API לא מפה טוב על ממשק ה- API של Windows קובץ באופן מטפל מצבי המניות ואת נפתחת נפתחת היטב. אז התוצאה נטו היא קצת מבולגן.

    יש לך את זה: שתי גישות שונות לטיפול הקובץ מניבות שתי תוצאות שונות.


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