使用open
和建議flock
鎖定,作家需要持有LOCK_EX
排他鎖。讀者一定不能持有任何鎖,他們然後可能會看到文件突然截斷。
Plain fopen
可以用於讀者。對於良好表現作家,(檢查略去了其他錯誤)
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/file.h>
#include <fcntl.h>
#include <stdio.h>
// never truncates
int fd = open("foo.log", O_CREAT|O_WRONLY /*or O_RDWR */, 0644 /* mode */);
if (flock(fd, LOCK_EX|LOCK_NB) != 0) {
perror("Locking failed - I am not an exclusive writer");
exit(1);
}
// I hold the exclusive lock - now, truncate the file to 0 bytes
ftruncate(fd, 0);
如果你想使用<stdio.h>
程序與在其上的文件,你可以使用fdopen
:
// "w" will not truncate!
FILE *f = fdopen(fd, "w"); // or `r+` for O_RDWR...
請注意,一個讀卡器一定不能設置一個LOCK_SH
鎖定文件,否則它不能通過令狀打開呃。
您使用了[tag:C++]和[tag:c]標籤,但代碼只能是C++ **或** C.不能。你沒有提出一個問題,你只是說了一個問題,所以...這是令人遺憾的不清楚。你**必須提出一個明確的問題,在問題的最後帶一個問號,以便我們能夠清楚地回答它。 –
這是一個有點問題的問題 - 你需要添加*更多*細節你打算做什麼。在Linux中沒有正確的*強制*文件鎖定 - 鎖只是建議性的 - 即一個糟糕的程序可以忽略它們 - 這些適合你嗎? –
@MarcusMüller其實,這裏的語言不太相關 - 與Linux系統調用語義更相關。 –