8.1 文件描述符
UNIX操作系统中,所有的外围设备(包括键盘和显示器)都被看作是文件系统中的文件。系统通过文件描述符来标识文件:标准输入为0,标准输出为1,标准错误为2。
当的输入/输出被重定向时,shell把文件描述符0和1的默认赋值改变为指定的文件。
8.2 低级I/o——read和write
read和write是UNIX的两个系统调用,这两个函数中,第一个参数是文件描述符,第二个参数是程序中存放读或写的数据的字符数组,第三个参数是要传输的字节数。
int read(int fd,char *buf,int n); int write(int fd,char *buf,int n);
每个调用返回实际传输的字节数。在读文件时,函数的返回值可能会小于请求的字节数,如果返回0,则表示已经达文件的结尾;如果返回-1,则表示发生了某种错误。在写文件时,返回值是实际写入的字节数。如果返回值与请求写入的字节数不相等,则说明发生了错误。
下面是用read和write构造getchar的两个版本:
第一个版本:它通过每次从标准输入读入一个字符来实现无缓冲输入
#include "syscalls.h" int getchar(void) { char ch; return (read(0,&ch,1))==1?(unsigned char)ch:EOF; }
第二个版本:每次读入一组字符,但是每次只输出一个字符
#include "syscalls.h" int getchar(void) { static char buf[BUFSIZ];