stdio函数如何处理部分成功?

时间:2016-04-25 12:05:23

标签: c

如果我这样做

int res = puts("hello world");

在撰写"hello"之后会发生错误,它会返回EOF还是5?

http://pubs.opengroup.org/onlinepubs/9699919799/functions/puts.html似乎并不十分明确。

显然http://pubs.opengroup.org/onlinepubs/9699919799/functions/fwrite.html 确实可以处理部分成功(虽然我认为如果size!=1必须有一些信息丢失),但stdio家族的其余部分呢?

2 个答案:

答案 0 :(得分:4)

从您链接到puts的POSIX参考:

  

成功完成后, puts()将返回非负数。否则,它应返回EOF,应为流设置错误指示符,并设置 errno 以指示错误。

非常明确地说:如果在输出过程中的任何地方或任何时间出现错误,则会返回EOF,并且errno将被适当设置。如果所有输出都成功发送到输出流,则puts函数仅返回成功。

至于其他功能,它们包含类似的注释,说明成功或失败时会发生什么。如果某个函数可以部分成功,例如the fwrite function,它会说明一些效果:

  

成功写入的对象数,如果发生错误,可能会少于计数。

答案 1 :(得分:1)

即使是部分成功也是写错误。所以函数返回EOF

C99规范中的第7.19.7.10-3章明确说:

  

返回

     

如果发生写入错误,puts函数返回EOF;否则它返回一个非负值。