zoukankan      html  css  js  c++  java
  • 20145234黄斐《信息安全系统设计基础》第九周学习总结(练习题)

    课本习题

    10.1 下面程序的输出是什么?

    #include "csapp.h"
    int main()
    {
        int fd1,fd2;
        fd1=Open("foo.txt",O_RDONLY,0);
        Close(fd1);
        fd2=Open("baz.txt",O_RDONLY,0);
        printf("fd2=%d
    ",fd2);
        exit(0);
    }

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

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

    #include "csapp.h"
    int main()
    {
        int fd1,fd2;
        char c;
        fd1=Open("foobar.txt",O_RDONLY,0);
        fd2=Open("foobar.txt",O_RDONLY,0);
        Read(fd1,&c,1);
        Read(fd2,&c,1);
        printf("c=%c
    ",c);
        exit(0);
    }

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

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

    #include "csapp.h"
    int main()
    {
        int fd;
        char c;
        fd=Open("foobar.txt",O_RDONLY,0);
        if(Fork()==0)
        {
            Read(fd,&c,1);
            exit(0);
        }
        Wait(NULL);
        Read(fd,&c,1);
        printf("c=%c
    ",c);
        exit(0);
    }

    答:这里是子进程继承父进程的描述符表,以及所有进程共享的同一个打开文件表。因此,描述符fd在父子进程中都指向同一个打开文件表表项。当子进程读取文件的一个字节时,文件位置加1.因此,父进程会读取第二个字节,而输出就是c=o,而不是10.2中的 c=f

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

    答:重定向标准输入(描述符0)到描述符5,直接调用dup2(5,0)

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

    #include "csapp.h"
    int main()
    {
        int fd1,fd2;
        char c;
        fd1=Open("foobar.txt",O_RDONLY,0);
        fd2=Open("foobar.txt",O_RDONLY,0);
        Read(fd2,&c,1);
    Dup2(fd2,fd1); Read(fd1,&c,1); printf("c=%c ",c); exit(0); }

    答:由于重定向,所以答案应该是c=o

  • 相关阅读:
    codesmith+mysql生成代码
    遭遇笔试
    线性是一种简洁,简洁就是美
    Microsoft Kinect SDK vs PrimeSense OpenNI
    资料收集:让OpenCV使用IPP
    提纲
    在PC上安装使用Kinect
    OpenNI设置Kinect帧率,读取IR图
    cout,rather than printf
    单步调试时,getnextframe会失败。又
  • 原文地址:https://www.cnblogs.com/taigenzhenjun/p/6059680.html
Copyright © 2011-2022 走看看