【发布时间】:2017-09-26 08:00:29
【问题描述】:
在 Linux 中使用 read() 与在 Windows 中有什么区别吗?
有没有可能在 Windows 中,它通常会比我请求的要少,而在 Linux 中,它通常会像我请求的那样多?
【问题讨论】:
标签: c linux windows system-calls
在 Linux 中使用 read() 与在 Windows 中有什么区别吗?
有没有可能在 Windows 中,它通常会比我请求的要少,而在 Linux 中,它通常会像我请求的那样多?
【问题讨论】:
标签: c linux windows system-calls
read 不是标准的 c 函数。从历史上看,它是一个 posix 系统调用,因此,windows(假设 windows 意味着 MSVC)根本不需要实现它。尽管如此,他们还是尝试了。我们可以比较这两种实现:
Linux:
http://man7.org/linux/man-pages/man2/read.2.html
成功时,返回读取的字节数(零表示结束 文件),并且文件位置由这个数字提前。它是 如果此数字小于字节数,则不是错误 要求;这可能会发生,例如,因为更少的字节 现在实际可用(也许是因为我们接近尾声 文件,或者因为我们正在从管道或终端读取),或者 因为 read() 被信号打断了。另见注释。
窗口:
https://msdn.microsoft.com/en-us/library/ms235412.aspx
https://msdn.microsoft.com/en-us/library/wyssk1bs.aspx
_read 返回读取的字节数,如果文件中剩余的字节数少于 count,或者文件以文本模式打开,则可能小于 count,在这种情况下,每个回车换行符(CR- LF) 对被替换为单个换行符。返回值中仅计算单个换行符。替换不影响文件指针。
因此,您应该期望两种实现都返回少于请求的字节数。此外,在文本模式下读取文件时有明显的区别。
【讨论】: