信息安全系统设计基础第十周学习总结

信息安全设计基础第十周学习总结

深化学习书中的内容

 i/o重定向

  • Unix外壳提供了I/O重定向操做符,容许用户将磁盘文件和标准输入输出联系起来。
  • I/O重定向的工做方式: 一种是使用dup2函数。

`include <unisted.h>安全

int dup2(int oldfd, int newfd);`app

  • dup2函数拷贝描述符表表项oldfd到描述符表表项newfd,覆盖描述符表表项newfd之前的内容。若是newfd已经打开了,dup2会在拷贝oldfd以前关闭newfd。

书的课后习题

练习题1函数

下面的程序输出是什么?学习

`#include csapp.h"

  int main()
  {
      int fd1, fd2;

      fd1 = Open("foo.txt", O_RDONLY, O);
      Close(fd1);
      fd2 = Open("baz.txt", O_RDONLY, O);
      printf("fd2 = %d\n", fd2);
      exit(0);
   }

`设计

答案:code

Unix进程生命周期开始时,打开的描述符赋给了stdin(描述符0)、stderr(描述度2)。open函数老是返回最低的未打开的描述符,因此第一次调用open会返回描述符3.调用close函数会释放描述符3,最后对open的调用会返回描述符3,所以程序的输出是”fd2=3“.blog

练习题2继承

假设磁盘文件foobar.txt由6个ASCII码字符“foobar”组成。那么下列程序的输出是什么? 程序以下:生命周期

`#include "csapp.h"

 int main()
 {
      int fd1, fd2;
      char  c;

      fd1 = Open("foobar.txt", O_RDONLY, O);
      fd2 = Open("foobar.txt", O_RDONLY, O);
      Read(fd, &c, 1);
      Read(fd2, &c, 1);
      printf("c = %c\n", c);
      exit(0);
  }

答案: 描述符fd1和fd2都有各自的打开文件表表项,因此每一个描述符对于foobar.txt都有它本身的文件位置。所以,从fd2的读操做会读取,foobar.txt的第一个字母,并输出 c = f进程

练习题3 就像前面同样,假设磁盘文件foobar.txt由6个ASCII码字符”foobar“组成。那么下列程序的输出是什么?

`#include "csapp.h"

 int main()
 {
      int fd;
      char c;

      fd = Open("foobar.txt", O_RDONLY, O);
      if(Fork()==0){
         Read(fd, &c, 1);
         exit(0);
      }
      Wait(NULL);
      Read(fd, &c, 1);
      printf("c = %c\n", c);
      exit(0);
 }

答案:

由于子进程会继承父进程的描述符表,以及全部进程共享的同一个打开文件表。所以,描述符fd在父子进程中都指向同一个文件表表项。当子进程读取文件的第一个字母时,文件位置加1.所以,父进程会读取第二个字节,而输出就是

c = 0

练习题4

如何用dup2将标准输入重定向到描述符5?

答案: 重定向标准输入(描述符0)到描述符5,咱们将调用dup2(5,0)或者等价的dup2(5,STDIN_FILENO).

练习题5

假设磁盘文件foobar.txt由6个ASCII码字符“foobar”组成。那么下列程序的输出是什么?

`#include "csapp.h"

 int main()
 {
      int fd1, fd2;
      char  c;

      fd1 = Open("foobar.txt", O_RDONLY, O);
      fd2 = Open("foobar.txt", O_RDONLY, O);
      Read(fd2, &c, 1);
      Dup2(fd2, fd1);
      Read(fd1, &c, 1);
      printf("c = %c\n", c);
      exit(0);
  }

答案:

由于咱们将fd1重定向到了fd2,输出其实是

c = 0.

课上笔记:

心得

本周是要学习深化第十章的内容,因此就将练习题好好看了一遍,有不少知识又懂得了不少。。很不错。

相关文章
相关标签/搜索