1
我有一個C程序和一個需要獨佔訪問文件的bash腳本。我已經看到you can use mkdir with bash,但這與C很好的搭配嗎?只測試一個目錄的存在,創建並刪除它是否安全?Shell/C信號量
我在做什麼:一個C程序不斷重寫一個新文件,然後從bash腳本中讀取數據。
我有一個C程序和一個需要獨佔訪問文件的bash腳本。我已經看到you can use mkdir with bash,但這與C很好的搭配嗎?只測試一個目錄的存在,創建並刪除它是否安全?Shell/C信號量
我在做什麼:一個C程序不斷重寫一個新文件,然後從bash腳本中讀取數據。
信號量的全部是原子性,如果您使用您自己的代碼檢查目錄的存在,您將失去該屬性。你應該做它用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)")
有什麼問題了嗎?我不確定你真的在這裏問什麼。 – Qix
在C中寫入一個不同名稱的文件,並在完成寫入時,將其重命名爲覆蓋現有文件。如果'bash'腳本恰好在您覆蓋文件時正在讀取該文件,它將仍然可以在文件打開時完成讀取。然後下一次'bash'腳本打開文件,它將得到新重命名的文件。 –
雖然我已經接受了@Dmitry的回答,但它解決了我的問題,因爲它能夠以更簡單的方式有效地解決我的問題,並且無需信號就可以開始處理您的建議。 – michelemarcon