2013-02-12 69 views
-2

正確鎖定文件我寫的ANSI C cgi-bin目錄服務器程序。 程序的每個實例都可以同時訪問相同的文件。 我做如下:如何在ANSI C

handle = fopen(name,type); 
fd = fileno(handle); 
MyLockFile(fd) //I use fcntl 
..... 

的問題是,我打開文件與「FOPEN」,不與「開放」。 「鎖定」會以這種方式工作嗎? 我可以鎖定「fd」,而不是「處理」。

的原因是,我不能寫可行的「FD =打開...」代碼。 我的代碼在下面創建可執行文件,寫入權限未設置。 我不知道爲什麼

fd = open(name,O_CREAT|O_WRONLY|S_IREAD|S_IWRITE|S_IRGRP| 
    S_IWGRP|S_IROTH|S_IWOTH); 
write(fd,data,strlen(data)); 
close(fd); 

我不會寫也不會追加到該文件。

回答

0

你的open()函數是錯誤的,當你指定O_CREAT,權限位需要是3參數,例如

open(name,O_CREAT|O_WRONLY, 
     S_IREAD|S_IWRITE|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH); 
+0

哦,是的!!!!謝謝!但是可以打開「fopen」,然後「fd = fileno(handle)」,然後鎖定fd? – nms 2013-02-12 13:59:47

+0

@nms那麼,文檔的fcntl說「因爲由標準輸入輸出進行緩衝的(3)庫,該包與例程鎖定使用記錄的應避免;使用讀(2)和寫入(2)代替 。 「 – nos 2013-02-12 14:33:52

+0

據我所知,」fopen「是低級別」open「的例程,我們應該使用低級別的」open「,」write「,」read「來鎖定,而不是」fwrite,...好的。你! – nms 2013-02-12 15:17:26