2016-10-13 125 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)")