hakain
@hakain
Немного знаю С/С++, Qt, и микроконтроллеры

Почему при удалении файла fwrite не возвращает ошибку?

Есть такой очень простой код, который раз в секунду добавляет в конец файла данные.
int main()
{
        FILE* file = fopen("test.file", "a");
        int i = 0;
        char str[100];

        while (1) {
                sprintf(str, "heeeey %d\n", i);
                int w = fwrite(str, sizeof(char), strlen(str), file);
                int fl = fflush(file);
                printf("fwrite = %d, fflush = %d \n", w, fl);
                sleep(1);
                ++i;
        }

        return EXIT_SUCCESS;
}


Я запускаю эту программу, вижу, что fwrite возвращает количество записанных байт, файл создался и данные появляются. В процессе выполнения программы удаляю файл и вижу, что fwrite продолжает возвращать количество записанных байт, при этом файла нет, и он не пересоздается. Хотя, казалось бы, логично, что я должен получить ошибку. fflush тоже молчит.
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
В процессе выполнения программы удаляю файл и вижу, что fwrite продолжает возвращать количество записанных байт, при этом файла нет, и он не пересоздается.

Ты не файл удаляешь, а только его имя из каталога. Файл остаётся до тех пор, пока не будет закрыт последний дескриптор указывающий на него. Все процессы открывшие файл до удаления его имени будут иметь к нему доступ до тех пор. В этом можно убедиться заглянув в /proc/<pid>/fd твоего процесса.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы