UNIX-LINUX C语言编程->实验室->多次打开文件实验
本实验基于《unix-linux编程实践教程》第二章习题2.6
实验说明:
unix允许一个文件同时被多个进程打开,也允许一个进程同时打开好几个文件,做多次打开文件的实验:
(1)以读的方式打开文件
(2)以写的方式打开文件
(3)再次以读的方式打开文件
这时有三个文件描述符,接下来
(4)从第一个文件描述符中读取20字节,显示读到的内容
(5)向第二个文件描述符写入"testing 123..."
(6)从第三个文件描述符读出20字节,显示读到的内容
代码:
#include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> int main(int ac,char *av[]) { int fd1; int fd2; int fd3; char *buf; buf = malloc(30000); /*以读的方式打开文件*/ if((fd1 = open(av[1],O_RDONLY)) == -1) { perror(av[1]); exit(1); } /*以写的方式打开文件*/ if((fd2 = open(av[1],O_WRONLY)) == -1) { perror(av[1]); exit(1); } /*再以读的方式打开文件*/ if((fd3 = open(av[1],O_RDONLY)) == -1) { perror(av[1]); exit(1); } /*从第一个文件描述符读20字节*/ if(read(fd1,buf,20) == -1) { perror(av[1]); exit(1); } printf("%s",buf); printf("\n"); /*从第二个文件描述符写入“testing 123...”*/ if(write(fd2,"testing 123...",sizeof("testing 123...")) != sizeof("testing 123...")) { perror(av[1]); exit(1); } /*从第三个文件描述符读出20字节*/ if(read(fd3,buf,20) == -1) { perror(av[1]); exit(1); } printf("%s",buf); printf("\n"); }
被读文件内容:
1231231231231231231231231231233123123131231
结果:
终端显示:
12312312312312312312
testing 123...
被读文件内容:
testing 123...^@1231231231231233123123131231
结论:
多次打开文件后,虽然具有个多文件描述符,但所有文件描述符都指向同一个文件
疑问:
在向第二个文件描述符中插入字符串时,怎么还插入了一个"^@"