您的位置:首页 > 理论基础

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

2014-12-22 16:36 309 查看
一个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的文件中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: