我在使用C语言。 我的程序从用户获取输入,将其发送到子进程,并且子进程将这些数字写入二进制文件。我这样打开文件:
FILE *tallyFileW;
// open a stream for writing and one for reading
tallyFileW=fopen("Numbers.bin","ab+"); // to write
if(!tallyFileW){
perror("Unable to Open Writing File!");
return(1);
}
else
perror("File opened to write numbers\n");
这很顺利;我的二进制文件包含我输入的所有数字。这就是我输入它们的方式:
void writeNumsToFile(FILE *tallySheet, double aNumber, double aNother)
{
char twoNumbers[512];
snprintf(twoNumbers,512,"%lf %lf\n",aNumber,aNother);
fwrite(twoNumbers,512,1,tallySheet);
}
当我去阅读这些数字时,我的麻烦就开始了:
void getAllNumbers(int fileDesc)
{
int index,wasRead;
char numSet[512];
FILE *getNumbers=fopen("Numbers.bin","rb");
if(!getNumbers){
perror("Unable to Open Reading File!");
}
else
perror("File opened to read numbers\n");
while(fread(&numSet,512,1,getNumbers)==1){
write(1,numSet,strlen(numSet));
}
fclose(getNumbers);
}
当我在输入任意数量的数字后立即尝试时,除了(如下所述)是否在程序已经运行之后我什么也得不到。打开此文件以追加。如果这是我第一次运行该程序,则不会打印任何内容。
please enter your input ---> e
you entered e
Hey, it was fun! See ya later.
File opened to read numbers
: Success
-bash-4.1$ emacs Numbers.bin
这是我的G'bye对话,然后没有数字。但是当我再次运行程序时,立即退出...
please enter your input ---> you entered e
Hey, it was fun! See ya later.
File opened to read numbers
: Success
11.000000 22.000000
33.000000 44.000000
55.000000 66.000000
77.000000 88.000000
-bash-4.1$ rm Numbers.bin
我错过了什么?我试过fseek()
,但它没有奏效。我也写了没有换行符的数字,但这没有帮助。
答案 0 :(得分:0)
所以我的代码,这导致了问题:
if(toupper(buf[0]) == 69){ // its over
getAllNumbers(fileDesc);
fclose(tallyFileW);
close(cli2SirvR);
close(1);
}
我发现的解决方案:
if(toupper(buf[0]) == 69){ // its over
fclose(tallyFileW);
getAllNumbers(fileDesc);
close(cli2SirvR);
close(1);
}
你能发现差异吗?在我试图阅读之后,我一直在关闭我的写文件指针。一旦我把写文件移到我尝试阅读之前,我的所有问题都消失了。谢谢你的帮助。