Зашто не могу да променим датотеке које се користе у оперативном систему Виндовс као што је могу на Линук и ОС Кс?
Када користите Линук и ОС Кс, оперативни систем вас неће зауставити да избришете датотеку која је тренутно у употреби, али на Виндовс-у ће вам бити изричито забрањено. Оно што даје? Зашто можете уређивати и брисати датотеке у употреби у Уник-изведеним системима, али не и Виндовсима?
Данашња сесија питања и одговора долази нам захваљујући СуперУсер-у - подјела Стацк Екцханге-а, груписане од стране заједнице веб-локација за питања и одговоре.
Питање
Читач СуперУсер тхе.мидгет жели да зна зашто Линук и Виндовс различито третирају датотеке у употреби:
Једна од ствари које су ме збуниле откако сам почео да користим Линук је чињеница да вам омогућава да промените име фајла или га чак и избришете док се чита. Пример је како сам случајно покушао да избришем видео док је био у игри. Успио сам, и био сам изненађен када сам сазнао да можете да промените било шта у датотеци без бриге ако се тренутно користи или не.
Дакле, оно што се дешава иза кулиса и спречава га да безобзирно брише ствари у Виндовсима као што може у Линуку?
Одговор
Доприносиоци СуперУсер-а бацају мало светла на ситуацију за. Амазед пише:
Кад год отворите или извршите датотеку у Виндовс-у, Виндовс закључава датотеку на мјесту (ово је поједностављење, али обично је истина.) Датотека која је закључана процесом не може се избрисати док је процес не ослободи. То је разлог зашто сваки пут када се Виндовс ажурира, потребно је поново покренути систем да би он ступио на снагу.
С друге стране, оперативни системи слични Унику као што су Линук и Мац ОС Кс не закључавају фајл већ радије диск секторима. Ово се може чинити тривијалним разликовањем, али то значи да се запис датотеке у таблици садржаја може избрисати без ометања било којег програма који већ има отворену датотеку. Тако да можете избрисати датотеку док се она још увек извршава или је на неки други начин у употреби и наставиће да постоји на диску све док неки процес има отворену ручку за њу иако је њен унос у табели датотека нестао..
Давид Сцхвартз шири идеју и наглашава како ствари требају бити идеалне и како су у пракси:
Виндовс се аутоматски поставља на аутоматско, обавезно закључавање датотека. УНИКС-ови подразумијевају ручно, кооперативно закључавање датотека. У оба случаја, подразумеване вредности се могу надјачати, али у оба случаја обично нису.
Много старих Виндовс кода користи Ц / Ц ++ АПИ (функције као што је фопен), а не изворни АПИ (функције као што је ЦреатеФиле). Ц / Ц ++ АПИ вам не омогућава да одредите како ће обавезно закључавање функционисати, тако да ћете добити подразумеване вредности. Подразумевани “режим за дељење” тежи да забрани “конфликтне” операције. Ако отворите датотеку за писање, претпоставља се да се пише у конфликту, чак и ако никада не пишете у датотеку. Исто важи и за преименовања.
И овде се погоршава. Осим отварања за читање или писање, Ц / Ц ++ АПИ не пружа могућност да одредите шта желите да урадите са датотеком. Дакле, АПИ мора да претпостави да ћете извршити било коју легалну операцију. Пошто је закључавање обавезно, отворено које дозвољава конфликтну операцију ће бити одбијено, чак и ако код није намеравао да изврши конфликтну операцију, већ је само отворио датотеку за другу сврху.
Дакле, ако код користи Ц / Ц ++ АПИ, или користи изворни АПИ без посебног размишљања о овим проблемима, они ће престати са максималним скупом могућих операција за сваки фајл који отворе и не могу отворити датотеку, осим ако свака могућа операција када би се отворио неусаглашен.
По мом мишљењу, Виндовс метода би функционисала много боље од УНИКС методе ако би сваки програм изабрао модове дељења и отворене модове мудро и здраво решио случајеве неуспеха. Међутим, УНИКС метода ради боље ако код не смета размишљање о овим питањима. Нажалост, основни Ц / Ц ++ АПИ не мапира се добро на АПИ датотеку Виндовс-а на начин који управља начинима размјене и добро се отвара конфликт. Дакле, нето резултат је помало неуредан.
Ту имате: два различита приступа управљању датотекама дају два различита резултата.
Имате ли нешто да додате објашњењу? Звучи у коментарима. Желите ли прочитати више одговора од других технолошки паметних Стацк Екцханге корисника? Погледајте цео дискусију овде.