2016-10-13 164 views
1

我有一個C程序和一個需要獨佔訪問文件的bash腳本。我已經看到you can use mkdir with bash,但這與C很好的搭配嗎?只測試一個目錄的存在,創建並刪除它是否安全?Shell/C信號量

我在做什麼:一個C程序不斷重寫一個新文件,然後從bash腳本中讀取數據。

+0

有什麼問題了嗎?我不確定你真的在這裏問什麼。 – Qix

+2

在C中寫入一個不同名稱的文件,並在完成寫入時,將其重命名爲覆蓋現有文件。如果'bash'腳本恰好在您覆蓋文件時正在讀取該文件,它將仍然可以在文件打開時完成讀取。然後下一次'bash'腳本打開文件,它將得到新重命名的文件。 –

+0

雖然我已經接受了@Dmitry的回答,但它解決了我的問題,因爲它能夠以更簡單的方式有效地解決我的問題,並且無需信號就可以開始處理您的建議。 – michelemarcon

回答

3

信號量的全部是原子性,如果您使用您自己的代碼檢查目錄的存在,您將失去該屬性。你應該做它用mkdir功能檢查EEXIST錯誤代碼,一旦它返回:

char * lockdir="/tmp/myscript.lock"; 
int retval=mkdir(lockdir, S_IRWXU); 
if(retval == 0) printf("successfully acquired lock: %s", lockdir); 
else if(errno == EEXIST) printf("cannot acquire lock %s", lockdir); 
else printf("Something bad happened (permissions/no free space/read-only filesystem)")