0
我很好奇在這個scenero中會發生什麼。假設我打開一個文件進行閱讀,並開始閱讀循環中的內容。像這樣:正在更換文件時讀取
$fp = fopen('test.txt', 'r');
while(!feof($fp)) {
fread($fp, 1024);
}
fclose($fp);
如果在讀它時另一個進程開始附加到文件,會發生什麼情況?
我很好奇在這個scenero中會發生什麼。假設我打開一個文件進行閱讀,並開始閱讀循環中的內容。像這樣:正在更換文件時讀取
$fp = fopen('test.txt', 'r');
while(!feof($fp)) {
fread($fp, 1024);
}
fclose($fp);
如果在讀它時另一個進程開始附加到文件,會發生什麼情況?
在UNIX/Linux上:
所有進程只是將文件視爲一串長度爲字節的字節。如果其他人更改字節或更改長度,所有其他進程立即看到這個新數據。
打開的文件是指inode。如果你創建一個全新的文件,那麼它是一個新的inode。如果您通過舊文件重命名新文件,目錄中的文件名現在引用新的inode,而您打開舊的inode(即使現在不再可以看到它從任何目錄的任何地方鏈接)。在這種情況下,您將繼續看到舊文件,並且打開/修改新文件的任何進程只能看到新文件。
因此,運行上述代碼的過程並不是如何從操作系統中讀取文件的副本?如果其他進程不斷追加到文件,上面的代碼可以永久循環? – mellowsoon 2010-10-25 17:10:57
「如果其他進程不斷追加到文件中,他上面的代碼可能會永久循環?」是的。看尾巴-f依賴於這種行爲。 – 2010-10-25 17:12:23