释放C中的文件写锁定?

时间:2018-10-08 09:41:39

标签: c file-io

我面临着这个奇怪的问题,我很清楚可以解决这个问题,但是我正在这里寻找替代方案。每当我以“ a +”模式打开文件时,如果我先读取文件,然后使用fprintf()写入文件,便可以使用fread()进行读取。相反,如果我先写入文件然后再读取文件,则会在输出中得到空白值。 我不想在每次写入后都使用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 :(得分:2)

来自this fopen reference

  

在更新模式('+')中,可以同时执行输入和输出,但是如果没有对fflushfseek,{{1} }或fsetpos,并且除非有输入操作遇到文件结尾,否则在不介入rewindfseekfsetpos的情况下,输入之后不能输出。在更新模式下,即使指定了文本模式,也允许实现使用二进制模式。

因此,您不能彼此直接进行读写,必须显式设置或重置每个输入和输出功能之间的文件位置。