3.8 write函数用write函数向打开文件写数据。#include ssize_t write(int filed, const void *buff, size_t nbytes);返回:若成功为已写的字节数,若出错为-1其返回值通常与参数nbytes的值不同,否则表示出错。write出错的一个常见原因是:磁盘已写满,或者超过了对一个给定进程的文件长度限制(见7.11节及习题10.11)。对于普通文件,写操作从文件的当前位移量处开始。如果在打开该文件时,指定了O_APPEND选择项,则在每次写操作之前,将文件位移量设置在文件的当前结尾处。在一次成功写之后,该文件位移量增加实际写的字节数。

想要更深入了解write函数的使用?可以参考这篇Unix Linux中的read和write函数文章。它不仅解释了write的基础用法,还列举了各种常见错误情况,实在是学习Unix编程的好帮手!

3.9 I/O的效率程序3-3只使用read和write函数来复制一个文件。关于该程序应注意下列各点:

  • 它从标准输入读,写至标准输出,这就假定在执行本程序之前,这些标准输入、输出已由shell安排好。确实,所有常用的UNIX shell都提供一种方法,它在标准输入上打开一个文件用于读,在标准输出上创建(或重写)一个文件。

  • 很多应用程序假定标准输入是文件描述符0,标准输出是文件描述符1。本例中则用两个在中定义的名字STDIN_FILENO和STDOUT_FILENO。

  • 考虑到进程终止时,UNIX会关闭所有打开文件描述符,所以此程序并不关闭输入和输出文件。

  • 本程序对文件和二进制代码文件都能工作,因为对UNIX内核而言,这两种文件并无区别。想知道为什么吗?因为对于内核来说,它们都是一堆字节而已。程序3-3将标准输入复制到标准输出第3章文件I/O。

如果你对文件I/O操作感兴趣,还可以看看unix实验二同步与异步write的效率比较。这篇文章详细比较了同步与异步write的效率,读起来真让人开眼界!

同时,关于文件I/O操作的更多技巧,强烈推荐阅读linux文件I O编程。它深入浅出地介绍了如何在Linux环境下进行高效的文件操作,相信你会发现很多实用的小窍门!