我如何(合规地)从 tmpfile() 读取?

问题描述 投票:0回答:1

已经有“如何获取

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 不合规,但我想知道是否是这样或者我是否做错了什么在我的代码中。

c fread temporary-files
1个回答
0
投票

我如何(合规地)从 tmpfile() 读取?

通常与其他

FILE*
一样,带有
fread

您的代码是正确的。它从文件中读取。文件末尾没有任何内容可读取,因此

fread
返回 0 并设置
feof

如果您想在

fwrite
-tten 后从头开始读取文件,请先
fseek

© www.soinside.com 2019 - 2024. All rights reserved.