教材知识点总结
Unix I/O
-
介绍:所有I/O设备都被模型化为文件,这种将设备映射为文件的方式,允许Linux内核引出一个简单、低级的应用接口,称为Unix I/O。
-
打开文件:一个应用程序通过要求内核打开相应的文件,宣告它想要访问一个I/O设备。
-
每个进程开始时有3个打开的文件:标准输入、标准输出、标准错误。
-
改变当前文件位置:每个打开的文件,有一个文件位置k,文件位置是文件开头起始的字节偏移量。seek可以显式设置文件的当前位置。
-
读写文件:
读:从文件复制n个字节到内存中
写:从内存复制n个字节到文件中
-
关闭文件:内核释放文件打开时创建的数据结构,关闭打开的文件并释放内存。
-
文件
-
文件类型
-
普通文件:
-
文本文件:只含有ASCII或Unicode字符的普通文件。
-
二进制文件:所有不是文本文件的文件。
-
-
目录:包含一组链接的文件,每个链接都将一个文件名映射到一个文件。
-
套接字:用来与另一个进程进行跨网络通信的文件。
-
可以用cd命令修改shell中的当前工作目录。
-
路径名的两种形式:
-
绝对路径:以一个斜杠开始,表示从根节点开始的路径。
-
相对路径:以文件名开始,表示从当前工作目录开始的路径。
-
-
打开与关闭文件:
-
进程通过Open函数打开一个已存在的文件或者创建新文件。
int open(char *filename,int flags,mode_t mode);
-
原理:open函数将文件名转换成一个文件描述符,并且返回该描述符数字。
-
flag参数:
O_RDONLY:只读
O_WRONLY:只写
O_RDWR:可读可写
O_CREAT:如果文件不存在,创建一个新文件。
O_TRUNC:如果文件已存在,截断。
O_APPEND:在每次写操作前,设置文件位置到文件的结尾处。
例子:fd = Open("foo.txt",O_RDONLY,0)
以读的方式打开一个已存在的文件。
-
mode参数:指定了新文件的访问权限位。
S_IRXX:XX能够读这个文件
S_IWXX:XX能够写这个文件
S_IXXX:XX能够执行这个文件
-
进程通过调用close函数关闭一个打开的文件,传入的参数为文件描述符。
int close(int fd);
-
如果关闭一个已关闭的描述符会出错
-
-
读和写文件
-
应用程序通过read与write函数来执行输入和输出。
-
read介绍:read函数从描述符为fd的当前文件位置复制最多n个字节到内存位置buf,返回值为-1表示一个错误,返回值为0表示EOF。
ssize_t read(int fd, void *buf , size_t n);
-
write介绍:从内存位置buf复制至多n个字节到描述符fd的当前文件位置。
ssize_t write(int fd, const void *buf , size_t n);
-
-
-
RIO包的两种不同函数
-
无缓冲的输入输出函数:直接在内存与文件之间传送数据
-
带缓冲的输入函数:允许高效地从文件中读取文本行与二进制数据。
-
-
应用可以通过stat函数检索相关文件信息。
-
stat函数以一个文件名为输入,并填写一个stat数据结构中的各个成员。
int stat(const char *filename,struct stat *buf);
-
-
标准I/O
-
相关函数
-
打开与关闭文件:fopen(),fclose()
-
读和写:fread(),fwrite()
-
读、写字符串:fgets(),fputs()
-
课上相关命令总结
-
od :读取文件内容,以二进制显示。
-
man -k k1| grep k2 | grep k3:过滤关键字k查找
-
grep -nr XXX /usr/include:寻找XXX在哪一个文件中