一.单选题:
Ps : 当时由于去广州路上颠簸很困,导致刚做几分钟题目就睡了一觉。起来发现20分钟过去了。擦擦!
1. 假设磁盘文件foobar.txt 由 6个ASCII 码字符“foobar” 组成,那么程序的输出是什么?
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <fcntl.h> 4 int main(int argc, char const *argv[]) 5 { 6 int fd1, fd2; 7 char c; 8 fd1 = open("foobar.txt", O_RDONLY); 9 fd2 = open("foobar.txt", O_RDONLY); 10 read(fd1, &c, 1); 11 read(fd2, &c, 1); 12 printf("c=%c\n", c); 13 return 0; 14 }
A.f B.o C.b D.a
我的思路是 先从fd1 指向文件里面读一个字符赋给字符c,之后在从fd2 里面读一个字符赋给字符c,当然是覆盖了,所以是 f 如果第二个read里面读的是fd1 文件描述副,那么答案就应该是 o,因为读了两次。o会覆盖之前的c。
2.还是foobar.txt文件,下面程序的输出是什么?
1 #include <stdio.h> 2 #include <fcntl.h> 3 #include <unistd.h> 4 5 int main(int argc, char const *argv[]) 6 { 7 int fd; 8 char c; 9 fd = open("foobar.txt", O_RDONLY); 10 if(fork()==0){ 11 read(fd, &c, 1); 12 return 0; 13 } 14 wait(NULL); 15 read(fd, &c, 1); 16 printf("c=%c\n", c); 17 return 0; 18 }
A.f B.o C.b D.a
这道题是 o 因为父亲等孩子退出之后才能进行第二次读操作,毕竟前面有wait 要先等待孩子执行完,父进程才可以执行
3.还是foobar.txt 下面程