zoukankan      html  css  js  c++  java
  • 《UNIX环境高级编程》 第三章 文件IO

    第三章习题

    1,当读/写磁盘时,本章中的确定时不带缓冲的IO吗?

    答:是

    带缓冲IO:用户缓冲区-内核缓冲区-磁盘

    不带缓冲IO:内核缓冲区-磁盘

    不带缓冲IO的话就每次都要系统调用后才能到内核缓冲区,时间开销大

    2,编写一个和3.12一样dup2一样功能的程序,要求不调用fcntl,并且有正确的出错处理

     思路:复制文件描述符就dup dup2 fcntl三个函数  ,那么只能用dup了,他们申请的原则都是找到当前最小的那个没用的文件描述符,那么久一直申请,直到申请到那个描述符

    3.假设一个进程执行下面三个函数调用

    fd1=open(path,flags);

    fd2=dup(fd1);

    fd3=open(path,flags);

    画出类似3-9的结果图,对于fd1作用于fcntl 来说,F_SETFD命令会影响哪一个文件描述符?F_SETFL呢?

     

    2()盗图

    F_SETFD :获得描述符

    F_SETFL:获得描述符状态(读/写)

    4.许多程序中都包含下面一段代码

    dup2(fd,0)

    dup2(fd,1)

    dup2(fd,2)

    if(fc>2) close(fd)

    为了说明if语句的必要性,假设fd是1,画出每次调用dup2时三个描述符项及相应的文件表项的变化情况,然后再画出fd为3的情况

    答:fd为1时,那么会变成0 1 2描述符,不会释放1,     fd为3的时候会有 0 1 2 3四个描述符,会释放3

    5.在Bourne shell,Bourne-again shell和 Korn shell中,digit1>&digit2 表示要将描述符digit1重定向至描述符digit2的同一文件,请说明下面两条命令的区别

    ./a.out >outfile 2>&1

    ./a.out 2>&1>outfile

    (提示:shell从左到右处理命令行)

    答:第一个: 先将标准输出指向outfile   ,然后再将错误描述符指向标准输出,但是这个时候标准输出已经指向outfile,所有标准错误和标准输出都指向outfile

    第二个:先将标准错误指向标准输出,然后再将标准输出指向outfile,结果就是标准错误指向标准输出,标准输出指向了outfile

    6.如果使用追加标志打开一个文件以便读写能否lseek调整其他位置读写

    答:因为追加就是在尾端写,那么用lseek调整后,read可以正常读取,但是write会自动到末尾然后开始写

    #include "apue.h"
    #include <fcntl.h>
    
    int main(void)
    {
    
            int fd;
            char buf1[20]; /*定义一个字符串用来读取文件中的字符*/
            char buf2[10]="onetwothre";/*用来写入的字符串*/
            if ((fd = open("/home/mocun/unix/chapter1/try",2|O_APPEND)) < 0)/*使用追加方式打开文件*/
                    printf("open error! 
    ");
            if (lseek(fd,5,SEEK_SET) < 0) /*将文件的偏移量设置为5*/
                    printf("lseek error! 
    ");
            if (read(fd,buf1,5) < 0)     /*从偏移量为5处读出五个字符*/
                    printf("read error! 
    ");
            else
                    printf("read:%s",buf1);/*将读出的字读输出*/
            if (write(fd,buf2,10) < 0)    /*将字符串buf2写入文件*/
                    printf("write error! 
    ");
    }
  • 相关阅读:
    阿里P8聊并发编程:线程中断和终止
    浅谈Java中的锁:Synchronized、重入锁、读写锁
    史上最全Java面试题!进程,线程相关部分下篇(带全部答案)
    @史上最全Java面试题!关于volatile关键字篇(带全部答案)
    @史上最全Java面试题!进程,线程相关部分上篇(带全部答案)
    一道号称“史上最难”java面试题引发的线程安全思考,掌握了吗?
    stopWatch
    mysql语句及执行计划
    Awr
    文件下载
  • 原文地址:https://www.cnblogs.com/Lis-/p/12824970.html
Copyright © 2011-2022 走看看