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