- Thu 8 Feb 15:43:18 GMT 2018
- Part III
- interaction and communication between Programs
- --------------------------------------------------------
- chapter 10 System-Level I/O
- 10.1 Unix I/O
- <unistd.h> : STDIN_FILENO STDOUT_FILENO STDERR_FILENO
- 10.2 files
对内核而言, 文本文件和二进制文件没有区别
- 10.3 open and close files
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- int open(char *filename, int flags, mode_t mode);
- flags:
- + O_RDONLY
- + O_WRONLY
- + O_RDWR
- for write:
- + O_CREAT
- + O_TRUNC
- + O_APPEND
- fd = open("foo.txt",O_WRONLY|O_APPEND,O);
- umask(O_WRONLY);
- #include <unistd.h>
- int close(int fd);
- 10.4 read and write files
- #include <unistd.h>
- ssize_t read(int fd, void *buf, size_t n);
- ssize_t write(int fd, const void *buf,size_t n);
- lseek function set position.
- In the x86-64, size_t means unsigned long and ssize_t
- means long type.
10.5 用 RIO 包健壮地读写 (Robust I/O)
RIO 提供两类不同函数:
+ 无缓冲的输入输出函数
对二进制读写网络有用
+ 带缓冲的输入输出函数
对文件中读写有用
10.6 读取文件元数据
应用程序能通过调用 stat 和 fstat 函数, 检索到关于文件的信
息 (有时也称为文件的元数据)
10.7 读取目录内容
- #include <sys/types.h>
- #include <dirent.h>
- + DIR *opendir( const char *name);
- + struct dirent *readdir(DIR *dirp);
- + struct dirent {
- ino_t d_ino; // inode number
- char d_name[256]; // filename
- };
- + int closedir(DIR *dirp);
10.8 共享文件
内核用三个相关的数据结构来表示打开的文件:
1. 描述符表 (descriptor table).
Each process has its own descriptor tabel.
2. 文件表 (file table).
- Each file table entry consists of the current
- file position, a reference count of the number
- of descriptor entries that currently point to it.
- The kernel will not delete the file table entry
- until its reference count is Zero.
3. v-node 表
- Like the file table, the v-node table is shared
- by all processes. Each each contains most of the
- information in the stat structure, including
- the st_mode and st_size members.
- 10.9 I/O Redirection
- #include <unistd.h>
- int dup2(int oldfd, int newfd);
- 10.10 Standard I/O
- The libary(libc) provides functions for opening and
- closing files( fopen and fclose ), reading and writing
- bytes( fread and fwrite ), reading and writing strings
- ( fgets and fputs ), and sophisticated formatted I/O
- ( scanf and printf ).
- To the programmer, a stream is a pointer to a
- structure of type FILE.
10.11 综合: 我该使用哪些 I/O 函数
来源: http://www.bubuko.com/infodetail-2542380.html