已经有“如何获取
tmpfile()
创建的路径?”的问题了。但我的理解是,该标准并不保证创建的文件具有可访问的路径。那么,如果标准不能保证这一点,那么在写入 tmpfile 后读取它的“标准”方法是什么? (当然,永远不会被写入的 tmpfile 是没有意义的,如果你从未读回它,那么写入就没有意义)
我目前有这个代码:
struct foo {
...
};
FILE *fp = tmpfile();
struct foo x = { ... };
struct foo y = { ... };
int err = fwrite(&x, sizeof(struct foo), 1, fp);
printf("err: %x/%x\n", err, errno);
fflush(fp);
err = fread(&y, sizeof(struct foo), 1, fp);
printf("err: %x/%x\n", err, feof(fp));
给出输出
err: 1/0
err: 0/1
我在 onlinegdb.com 上运行这段代码,因为我在这台机器上没有编译器,所以可能是 onlinegdb 不合规,但我想知道是否是这样或者我是否做错了什么在我的代码中。
我如何(合规地)从 tmpfile() 读取?
通常与其他
FILE*
一样,带有 fread
。
您的代码是正确的。它从文件中读取。文件末尾没有任何内容可读取,因此
fread
返回 0 并设置 feof
。
如果您想在
fwrite
-tten 后从头开始读取文件,请先 fseek
。