- 浏览: 31945 次
- 性别:
- 来自: 南京
最新评论
文章列表
标准I/O库及其头文件stdio.h为底层I/O系统提供了一个通用的接口。这个库现在已经成为了ANSI标准C的一部分。
当开始运行程序时,他一般会有已经打开的文件描述符:0--标准输入;1--标准输出;2--标准错误。
write系统调用:
#include<unistd.h>
size_t write(int fildes,const void * buf,size_t nbytes);
read系统调用:
#include <unistd.h>
size_t read(int fildes,void *buf,size_t nbytes);
open系统调用:
#include <fcntl.h& ...
在输入输出操作中,直接使用底层系统调用的问题是他们的效率很低,为什么呢?
系统调用会影响系统的性能。执行系统调用时,Linux必须从用户代码切换到内核代码运行,然后再返回用户代码。减小这种开销的好方法是,在程序中尽量减少系统调用的次数,并且让每次系统调用完成尽可能多的工作。例如每次读写大量的数据而不是每次仅读写一个字符。
硬件会对底层系统调用一次能读写的数据块做出一定的限制。例如,磁带机通常的写操作数据块长度是10K,所以如果所写的数据量不是10K的整数倍,磁带机还是会以10K为单位绕转磁带,这就在磁带上留下间隙。