读(2)是C89规范的一部分吗?

时间:2016-09-02 22:54:31

标签: c posix fread

我对C有点新鲜。我想知道,C89规范的read(2)功能部分,还是POSIX规范?我问,因为我试图找出read的返回类型,而here等地方的手册页说它是ssize_t。但是,ssize_t仅在POSIX中需要,而不是根据this question的常规C. This MSDN page似乎证实了我的怀疑,因为它说

  

不推荐使用此POSIX功能。改为使用符合ISO C ++标准的_read。

我抓住了draft of the C89 standard,并没有在目录中提及阅读。但是,提到freadhttp://port70.net/~nsz/c/c89/c89-draft.html#4.9.8.1

那么最好使用例如从标准输入中读取fread(buf, 1, sizeof(buf), stdin)而不是read(STDIN_FILENO, buf, sizeof(buf))

编辑:抱歉让您感到困惑。我没有引用MSDN来建议read被弃用,只是为了表明它确实是POSIX标准的一部分(它提到了#34; POSIX函数")而不是C标准。 / p>

1 个答案:

答案 0 :(得分:2)

read()不是,而且从来都不是标准C,所以如果你想编写从文件中读取的可移植代码,请不要使用它;使用fread()

另一方面,您可能希望在Posix系统上执行不可移植的操作,例如使用管道和套接字。在这种情况下,请继续使用Posix接口。