信息安全系統設計基礎第十週學習總結

信息安全設計基礎第十週學習總結

深化學習書中的內容

 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.

課上筆記:

心得

本週是要學習深化第十章的內容,因此就將練習題好好看了一遍,有不少知識又懂得了不少。。很不錯。

相關文章
相關標籤/搜索