标签:style blog http color os ar 使用 strong sp
文件描述符:
open和openat函数:
creat函数:
lseek函数:
1. 用于显式指定被打开文件的偏移量,返回当前文件的新偏移量;
2. 测试标准输入是否可以seek:
1 #include "apue.h" 2 3 int main(void) 4 { 5 if (lseek(STDIN_FILENO, 0, SEEK_CUR) == -1) { 6 printf("canot seek\n"); 7 } 8 else { 9 printf("seek OK\n"); 10 } 11 exit(0); 12 }
3. 由于文件当前偏移量可能为负数,lseek的返回值应该和 -1 比较,而不是测试是否小于0;
4. 设置的当前文件偏移量大于文件长度时,文件中允许形成空洞,空洞不需要存储空间来存储;
5. 在文件中创建一个空洞:
1 #include "apue.h" 2 #include <fcntl.h> 3 4 char buf1[] = "abcdefghij"; 5 char buf2[] = "ABCDEFGHIJ"; 6 7 int main(void) 8 { 9 int fd; 10 11 if ((fd = creat("file.hole", FILE_MODE)) < 0) { 12 err_sys("creat error"); 13 } 14 15 if (write(fd, buf1, 10) != 10) { 16 err_sys("buf1 write error"); 17 } 18 /*offset now = 10*/ 19 20 if (lseek(fd, 16384, SEEK_SET) == -1) { 21 err_sys("lseek error"); 22 } 23 /*offset now = 16384*/ 24 25 if (write(fd, buf2, 10) != 10) { 26 err_sys("buf2 write error"); 27 } 28 29 exit(0); 30 }
read/write函数:
I/O效率:
1. 利用缓冲将标准输入复制到标准输出:
1 #include "apue.h" 2 3 #define BUFFSIZE 4096 4 5 int main(void) 6 { 7 int n; 8 char buf[BUFFSIZE]; 9 10 while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0) { 11 if (write(STDOUT_FILENO, buf, n) != n) { 12 err_sys("write error"); 13 } 14 } 15 if (n < 0) { 16 err_sys("read error"); 17 } 18 19 exit(0); 20 }
2. Linux ext4文件系统,块大小是4096,缓冲大小最佳值是4096。
文件共享:
1. 内核使用三个数据结构表示打开的文件:
原子操作:
dup和dup2函数:
sync, fsync和fdatasync函数:
未完待续。。。。。
标签:style blog http color os ar 使用 strong sp
原文地址:http://www.cnblogs.com/skycore/p/4035856.html