read(2)是否为C89规范的一部分?
我对C有些陌生。我想知道,read(2)是否为C89规范的一部分?,c,posix,fread,C,Posix,Fread,我对C有些陌生。我想知道,read(2)函数是C89规范的一部分,还是仅仅是POSIX规范?我问这个问题是因为我试图找出read的返回类型,以及诸如say it'sssize\t之类的地方的手册页。但是,ssize\u t仅在POSIX中需要,而不是根据需要的常规C。似乎证实了我的怀疑,因为它说 此POSIX函数已弃用。使用ISOC++ +一致性代替读。 我拿到了那本书,目录里没有提到阅读。然而,这里提到了fread: 那么,使用例如fread(buf,1,sizeof(buf),stdin)而
read(2)
函数是C89规范的一部分,还是仅仅是POSIX规范?我问这个问题是因为我试图找出read
的返回类型,以及诸如say it'sssize\t
之类的地方的手册页。但是,ssize\u t
仅在POSIX中需要,而不是根据需要的常规C。似乎证实了我的怀疑,因为它说
此POSIX函数已弃用。使用ISOC++ +一致性代替读。
我拿到了那本书,目录里没有提到阅读。然而,这里提到了fread:
那么,使用例如fread(buf,1,sizeof(buf),stdin)
而不是read(stdin\u FILENO,buf,sizeof(buf))
来读取标准输入是否更好
编辑:很抱歉造成混淆。我引用MSDN并不是说read
不受欢迎,只是为了表明它确实是POSIX标准的一部分(它提到了“POSIX函数”),而不是C标准。read()
不是也从来不是标准C,所以如果你想编写从文件读取的可移植代码,不要使用它;使用fread()
另一方面,可能需要在Posix系统上执行一些不可移植的操作,例如使用管道和插座。在这种情况下,继续使用Posix接口。读取
函数不是标准的C函数,只是Posix函数。如果你想变得便携,你应该改用fread
(和相关函数)。read(2)是POSIX。就IO而言,ISO C仅处理标准流。如果您想同时实现超级便携性和高效性,可以在stdin
中禁用缓冲,并使用fread
。Microsoft在Microsoft平台上不赞成使用读取
。使用MS作为C的参考是个坏主意。自17年以来,他们拒绝支持C标准。它们还放弃了对POSIX的支持,因此对于POSIX相关问题来说,它们也是一个糟糕的参考。而引文显然来自于一些C++语言,这是一种不同的语言。对于C.@AndrewHenle@yellowantphil@Olaf和其他人来说,这也是一个糟糕的资源,我引用MSDN并不是为了表明read
被弃用,只是为了表明它确实是POSIX标准的一部分(它提到了“POSIX函数”),而不是C标准。