阅读深入理解计算机系统(四)--------------- 系统级I/O

        一个Unix文件就是一个m个字节的序列,所有的I/O设备,如网络、磁盘和终端,都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行。

a.     打开文件,一个应用程序通过内核要求打开相应的文件,来宣告它要访问一个I/O设备,内核返回一个小的非负整数,叫做描述符,应用程序后续对这个文件的操作都是通过这个描述符。

int  open(char*filename,int flags,mode_t mode);

返回:若成功则为新文件描述符,若出错则为-1;

open函数将filename转换为一个文件描述符,返回的描述符总是进程中当前没有打开的最小描述符。

flags参数致命了进程打算如何访问这个文件,O_RNONLY、O_WRONLY、O_RDWR。

mode参数指定了新文件的访问权限位,给文件拥有者和其他用户设定权限。

close函数

int close(int  fd);

返回:成功则为0,若出错则为-1;

关闭一个已关闭的描述符会出错。

b.     读和写文件

ssize_t  read(int  fd,void *buf,size_t  n);

ssize_t  write(int  fd,const void  *buf,size_t  n);

返回:若成功则为写或者读的字节数,若出错则为-1;

c.      I/O重定向:dup2(oldfd,newfd);

dup2函数拷贝描述符表表项oldfd到描述符表表项newfd,例如:dup2(4,1)将会把输出到标准输出的所有数据都输出到描述符为4的文件中。

你可能感兴趣的:(阅读深入理解计算机系统(四)--------------- 系统级I/O)