Не помогают не ftrylockfile и не O_EXCL
От: nimdator  
Дата: 16.12.04 15:29
Оценка:
Уважаемые модераторы, пожалуйста, оставьте тему хотя бы на неделю.

Все просто. один процесс создает файл, другой должен дождаться
сладкого момента финала и скопировать этот файл.
Вопрос: как определить, что этот файл уже сделан?
Средства — С, ОС — Солярис.

Делаю тест:

/* test.c */
int main () {

        char* src_path="TEMP/ttt.txt";
        FILE* iop;
        int fildes;

        fildes=open(src_path, O_EXCL || O_WRONLY);
        printf("fildes = %d\n", fildes);

        close(fildes);
        iop=fopen(src_path,"w");
        fildes=ftrylockfile(iop);
        printf("fildes = %d\n", fildes);
        fclose(iop);

        return 0;
}


Затем

$> dd if=/dev/zero of=TEMP/ttt.txt bs=1 count=1000000 &
$> test
fildes = 3
fildes = 0
$>


То есть ни O_EXCL ни ftrylockfile не показали, что файл уже кем-то занят,
и в него что-то пишется. А как же это узнать?
Поиск не помог, так как в результате долгих копаний по форумам были предложены только эти два варианта.
Вдруг, кто-то знает третий?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.