Освобождение блокировки записи файла в C? - PullRequest
0 голосов
/ 08 октября 2018

Я сталкиваюсь с этой странной проблемой, ответ на которую мне ясен, но я ищу альтернативу здесь.Всякий раз, когда я открываю файл в режиме «+», я могу читать, используя fread (), если я сначала читаю его, а затем пишу в нем, используя fprintf ().Если я вместо этого сначала записываю в файл, а затем читаю его, я получаю пустое значение в выводе.Я не хочу fclose () указатель FILE fp после каждой записи, потому что я выполняю такие операции, как write-> read-> write-> read ....... n итераций.

Есть лиоптимальный способ добиться этого?

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <poll.h>
#include <linux/input.h>

int main(){

FILE * fp;
fp = fopen("myback.txt", "a+");
char buf[10];

fprintf(fp, "checking");

fread (buf,1,4,fp);
buf[4] = '\0'; //buf has read n bytes   
printf("%s \n", buf);
return 0;
}

1 Ответ

0 голосов
/ 08 октября 2018

С это fopen ссылка :

В режиме обновления ('+') могут выполняться как вход, так и выход, но выход не может сопровождаться вводом безза промежуточным вызовом fflush, fseek, fsetpos или rewind и вводом не может следовать вывод без промежуточного вызова fseek, fsetpos или rewind, если только операция ввода не встретиласьфайла.В режиме обновления реализациям разрешено использовать двоичный режим, даже если указан текстовый режим.

Чтобы вы не могли читать или писать непосредственно друг за другом, вы должны явно установить или сбросить положение файла между каждой функцией ввода и вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...