对于内核而言,所有打开文件都由文件描述符引用。当打开一个现存文件或创建一个
新文件时,内核向进程返回一个文件描述符。
当读,写一个文件时,用open或creat返回的文件描述符标识该文件,将其作为参数传给read或write。
UNIX shell使文件描述符0与进程的标准输入相结合,文件描述符1与标准输出相结合,文件描述符2与标准
出错输出相结合。这是UNIX shell以及很多应用程序使用的惯例,而与内核无关。
在POSIX.1应用程序中,幻数0,1,2应被代换成符号常数STDIN_FILENO,STDOUT_FILENO和STDERR_FILENO 头文件
文件描述符的范围是0~OPEN_MAX.早期版本采用上限值是19(允许每个进程打开20个文件)。现在很多系统增加至63.
SVR4和4.3+BSD对文件描述符的变化范围没有作规定,它只受到系统配置的存储器的总量,整型字的字长以及系统管理员所配置的
软性或硬性限制的约束。
void inout()
{
char buf[8192];
int n;
while((n=read(STDIN_FILENO,buf,8192))>0) //等待接收输入
{
if(write(STDOUT_FILENO,buf,n)!=n) //这就是标准输出啊
exit(1);
}
if(n<0)
printf("error");
}
阅读(1029) | 评论(0) | 转发(0) |