【发布时间】:2012-10-28 22:19:52
【问题描述】:
我在使用 stdio 命令处理文件中的数据时遇到问题。简而言之,当我将数据写入文件时,write 返回一个 int 表示它是成功的,但是当我读回它时,我只得到旧数据。
这是代码的精简版:
fd = open(filename,O_RDWR|O_APPEND);
struct dE *cDE = malloc(sizeof(struct dE));
//Read present data
printf("\nreading values at %d\n",off);
printf("SeekStatus <%d>\n",lseek(fd,off,SEEK_SET));
printf("ReadStatus <%d>\n",read(fd,cDE,deSize));
printf("current Key/Data <%d/%s>\n",cDE->key,cDE->data);
printf("\nwriting new values\n");
//Change the values locally
cDE->key = //something new
cDE->data = //something new
//Write them back
printf("SeekStatus <%d>\n",lseek(fd,off,SEEK_SET));
printf("WriteStatus <%d>\n",write(fd,cDE,deSize));
//Re-read to make sure that it got written back
printf("\nre-reading values at %d\n",off);
printf("SeekStatus <%d>\n",lseek(fd,off,SEEK_SET));
printf("ReadStatus <%d>\n",read(fd,cDE,deSize));
printf("current Key/Data <%d/%s>\n",cDE->key,cDE->data);
此外,如果您想知道,这里是 dE 结构:
struct dE {
int key;
char data[DataSize];
};
打印出来:
reading values at 1072
SeekStatus <1072>
ReadStatus <32>
current Key/Data <27/old>
writing new values
SeekStatus <1072>
WriteStatus <32>
re-reading values at 1072
SeekStatus <1072>
ReadStatus <32>
current Key/Data <27/old>
【问题讨论】:
-
read((*fd).fd,cDE,deSize);是否编译干净?此外,要取消引用指针,请使用->,即cDE->key。 -
您从未设置变量
offset和deSize的值,因此它们可能是任何值。您永远不会检查read、write或lseek的返回值。您需要发布代码的条带化可编译版本,以证明您遇到的问题或您提出的问题。 90% 的情况下,创建可编译示例的练习将为您解答问题。 -
你对目录和文件有权限吗?
-
我怀疑
(*cDE).data = //something new没有做你想做的事——你可能需要strncpy。 -
原谅我,我还是 StackOverflow 的新手,想出一个简洁的查询并不是我自然而然的事情。我用输出更新了我的代码。此处的所有内容都已编译,并且我稍微清理了格式。