我有一些代码,在一个服务器上运行良好,但当它被移植到另一个系统时出现了问题。问题似乎出在这里:
给定我在其他地方定义的一个结构:
user1_type user1; /* structure containing user data */
user1_type *user1_ptr=&user1;
这个例程将记录追加到文件末尾
if ((dfile=fopen(filename,"ab+"))==NULL)
error_message("Unable to open file for append.",filename,1);
else { /* append data */
user1.recid=ftell(dfile); /* update file position */
fwrite(user1_ptr,sizeof(user1),1,dfile);
fflush(dfile);
fclose(dfile);
我可以确认数据已经追加到文件中,但是user1.recid的值始终返回0——有什么想法吗?
更新:看起来问题并不是所有实现都需要在fopen()之后使用fseek()。当我追加时,在执行ftell()之前,我显然需要一个fseek(dfile, 0, SEEK_END);。但是,如果我想从文本或二进制文件的开头读取,是否也要在fopen()后立即放置一个fseek()?这是否因文件类型而异?
long int ftell(FILE *stream)
是一个用于获取文件流当前位置的函数。 - chux - Reinstate Monica