LINUX.ORG.RU

Открытый файл был переименован или удалён


1

1

Есть дескриптор открытого файла. Как определить, что файл был переименован или удалён, кроме как путём прочтения ссылки /proc/PID/fd/FILENO?



Последнее исправление: justluke (всего исправлений: 1)
struct stat {
    …
    nlink_t    st_nlink;  /* number of hard links */
    …
}

Теоретически дожно вернуть 0, но может я и ошиваюсь.

UPD: так и есть.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от quiet_readonly

Хаха, не — удление ловит, переименование нет:

#include <sys/types.h>
#include <sys/stat.h>
#include <assert.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int
main()
{
        int fd;
        struct stat st;

        fd = open("xxxxxx", O_RDWR|O_CREAT, 0644);
        assert(fd != -1);
        fstat(fd, &st);
        printf("nl: %d\n", st.st_nlink);

        rename("xxxxxx", "yyyyyy");
        fstat(fd, &st);
        printf("nl: %d\n", st.st_nlink);

        unlink("yyyyyy");
        fstat(fd, &st);
        printf("nl: %d\n", st.st_nlink);

        close(fd);

        return 0;
}
beastie ★★★★★
()

stackoverflow.com/questions/7785046/how-to-check-if-a-opened-file-has-been-removed-or-mvd-by-other-process

gh0stwizard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.