• 第十周学习报告


    10.7 I/O重定向

      Unix外壳提供了I/O重定向操作符,允许用户将磁盘文件和标准输入输出联系起来,例如:

            unix > ls > foo.txt

    dup2函数:

    拷贝描述符表项oldfd到描述符表表项newfd,覆盖描述符表表项newfd以前的内容。

    10.8 标准I/O

    标准I/O库(libc):高级输入输出函数

              fopen/fclose:打开和关闭文件
              fread/fwrite:读和写字节
              fgets/fputs:读和写字符串
              scanf/printf:复杂格式化的I/O函数

    标准I/O库将一个打开的文件模型化为一个流,一个流就是一个指向FILE类型的结构指针。

                   每个程序开始时都有三个打开的流:

                                             stdin:标准输入
                                             stdout:标准输出
                                             stderr:标准错误

    类型为FILE的流是对文件描述符和流缓冲区的抽象,流缓冲区的目的:使开销较高的Unix I/O系统调用的数量尽可能的小。

    10.9 综合:我该使用那些I/O函数

    标准I/O流,全双工,so为了防止冲突:

    • 限制一:跟在输出函数后的输入函数。——采用在每个输入操作前刷新缓冲区
    • 限制二:跟在输入函数后的输出函数。——对同一个打开的套字描述符打开两个流,一读一写。

    大多数情况使用标准I/O,但在网络套字上不要使用,这时使用健壮地RIO函数。

    格式化输出

    使用sprintf函数在存储器中格式化一个字符串,然后用rio_writen把它发送到套接口。

    格式化输入

    使用rio_readlineb来读一个完整的文本行,然后使用sscanf从文本行提取不同的字段。

     附录A 错误处理

    错误处理包装函数:

           给定某个基本的系统级函数foo,定义一个有相同参数的包装函数Foo。包装函数调用基本函数并检查错误。如果发现错误就打印一条信息并终止进程,否则返回调用者。即如果没有错误,包装函数的行为与基本函数完全一样。

    包装函数被封装在一个源文件(csapp.c)中,被编译和链接到每个程序中。

    A.1 Unix系统中的错误处理

    1、Unix风格的错误处理

              函数返回值既包括错误代码又包括有用的结果。如果遇到错误就返回-1,并将全局变量errno设置为指明错误原因的错误代码。如果成功就返回有用的结果。

    2、Posix风格的错误处理

            只用返回值来表明成功(0)或者失败(非0)。任何有用的结果都返回在通过引用传递进来的函数参数中。

    3、DNS风格的错误处理

            在失败时返回NULL指针,并设置全局变量h_errno。

     

    A.2 错误处理包装函数

     

    • Unix风格的错误处理包装函数

    • Posix风格的错误处理包装函数

    • DNS风格的错误处理包装函数

     

    实践部分:

       代码:

              

     ls能干什么:

         ls -l
        ls -a 
        ls -lu:最后访问时间
        ls -s:以块为单位的文件大小
        ls -t:按时间排序
        ls -F:显示文件类型   

    ls1:   

       显示当前文件夹的内容

     ls2:

          功能和ls1一样,并打印权限大小时间...

    who:

               who也有两个代码,运行的结果是一样的,代码实现的功能是一样的

               主要是从UTMP_FILE文件中读取信息到存储器中,然后再用标准输出函数打印信息:name,line,time,host,然后关闭文件

     

    cp:

         cp命令用来复制文件或者目录

    setecho:

               是设置echo值的一个函数

    echostate:

               这个函数是用来检查键盘键入命令是否可见

               由于setecho输入yes后,键盘键入命令是可见的,而输入no后,键盘键入命令是不可见的,两者结合起来用

     

  • 相关阅读:
    制作Windows Server 2008安装启动U盘
    wireshark教程(一)
    TCPdump抓包命令详解
    ATM交换机 和普通交换机区别
    胖ap和瘦ap区别
    酒店网络非常常见故障一例
    JQuery EasyUI DataGrid动态合并(标题)单元) 一
    字典表左右选择
    treegrid-dnd.js
    MySQL开发规范
  • 原文地址:https://www.cnblogs.com/20135314ZHU/p/4966127.html
Copyright © 2020-2023  润新知