unix环境高级编程第五章习题的一些拙见

开心,又到更新新的一章的时间了XD!

apue5_1:

这道题还是有意思的,虽然看上去比较简单,但是其中蕴含的东西还是比较多的。先把自己在这章中最重要的体会写下来吧!首先这一章讲的是IO流,那么IO流和直接的文件的系统调用有什么不同那?

我们先看一下read函数的原型size_t  read  (int  fd , void  *buf , size_t  nbytes);很显然我们在进行系统调用的时候要设置缓冲区,而缓冲区大小的设置其实是和系统有直接关系的,不然会影响系统调用的效率。而IO流之所以出现就是为了帮我们程序员隐藏这些信息,自己管理缓冲区,同时使系统调用的次数尽量少!这里标准IO库有几种管理缓冲区的方式,当然我个人在学习中认为一定要抓住无论是哪种缓冲区管理的方式只和流有关系!也就是缓冲区的管理方式是流的一种属性而与你已经IO的方式无关!

#include <stdio.h>
#include "apue.h"

void setbuf (FILE *restrict fp , char *restrict buf) {
    int fd;

    if (buf == NULL){
        if (setvbuf (fp , NULL , _IONBF , BUFSIZ) != 0)
            err_sys ("setvbuf for NULL failed");
    }
    else {
        if ((fd = fileno (fp)) < 0)
            err_sys ("fileno failed");

        if (isatty (fd)) {
            if (setvbuf (fp , buf , _IOLBF , BUFSIZ) != 0)
                err_sys ("setvbuf for _IOLBF failed");
        }else {
            if (setvbuf (fp , buf , _IOFBF , BUFSIZ) != 0)
                err_sys ("setvbuf for _IOFBF failed");
        }
    }
}
个题目中有一个细节,书上在说明setbuf的时候说到,如果流是设备相关的,那么就可以将流设置为行相关的,在这里我看了一下isatty函数正好是实现这个功能的,用文件描述符来进行判断!使用fileno函数将文件流转换为文件描述符。

——————————————————————————————————分割线2016.7.4

apue5.2:

书上对每次一行的I/O操作说的比较明白,对于这个题目而言,程序首先会从指定的流中读三个字节(假设都不包括换行符),再进行下一次操作,若果有换行符的存在,那么就就直接进行下一次读取操作,直到读取的流道理结尾、

apue5.3:

这个送分题,在下c语言基础还算不错,返回的值是送入到标准输出流中的字节数目。

题外话:这几天没更新的缘故一是因为心情不是很好,而是因为这几天在折腾C++,我要看STL!,不说了,以后还是每天两个题目。

——————————————————————————————————————————分割线2016.7.8

apue5.4:

我记得当时学习c和指针的时候,书上说了这个问题,之所以要声明为int最主要的因素是因为EOF可以肯定会在int的范围内,但是char就不能肯定EOF在其的范围当中,所以我们再进行getchar操作的时候要注意它的声明类型。

apue5.5:

这个题目我仔细思考了给出的答案,我不是很肯定自己的解释,我觉得这个地方应该是有两个缓冲区,一个是用户缓冲区,一个是内核缓冲区。首先我们看fflush直接冲洗文件流的缓冲区中的内容(用户缓冲区)到内核缓冲区,再使用fileno函数将文件流描述符转换成文件描述符(之前的编程当中我使用过,所以印象还是比较深刻的),再使用fsync函数将制定的文件描述中的内容(内核缓冲区中的内容)写到磁盘上,直到所有的内容都写到磁盘上后函数才会返回。

apue5.6:

这个题目我有点不知道作者额意图是什么,这里没使用fllush很容易理解,在这里标准输入标准输出都是行缓冲的,每次读入一行之后不会再去缓冲,会这届冲洗掉,它输出提示信息应该是调用的自身的头文件中的内容,使用像err_sys这样的输出,这里我猜测应该使用的是标准错误。

apue5.7:

这里这个题目我就跳过了,我的系统并不是BSD的。。。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本书全面介绍了UNIX系统的程序设计界面—系统调用界面和标准C库提供的许多函数。 本书的前15章着重于理论知识的阐述,主要内容包括UNIX文件和目录、进程环境、进程控制、 进程间通信以及各种I/O。在此基础上,分别按章介绍了多个应用实例,包括如何创建数据库函数库, PostScript 打印机驱动程序,调制解调器拨号器及在伪终端上运行其他程序的程序等。 本书内容丰富权威, 概念清晰精辟,一直以来被誉为UNIX编程的“圣经”,对于所有UNIX程序员—无论是初学者还是专家级人士 —都是一本无价的参考书籍。 目 录 译者序 译者简介 前言 第1章 UNIX基础知识 1 1.1 引言 1 1.2 登录 1 1.2.1 登录名 1 1.2.2 shell 1 1.3 文件和目录 2 1.3.1 文件系统 2 1.3.2 文件名 2 1.3.3 路径名 2 1.3.4 工作目录 4 1.3.5 起始目录 4 1.4 输入和输出 5 1.4.1 文件描述符 5 1.4.2 标准输入、标准输出和标准 出错 5 1.4.3 不用缓存的I/O 5 1.4.4 标准I/O 6 1.5 程序和进程 7 1.5.1 程序 7 1.5.2 进程和进程ID 7 1.5.3 进程控制 7 1.6 ANSI C 9 1.6.1 函数原型 9 1.6.2 类属指针 9 1.6.3 原始系统数据类型 10 1.7 出错处理 10 1.8 用户标识 11 1.8.1 用户ID 11 1.8.2 组ID 12 1.8.3 添加组ID 12 1.9 信号 12 1.10 UNIX时间值 14 1.11 系统调用和库函数 14 1.12 小结 16 习题 16 第2章 UNIX标准化及实现 17 2.1 引言 17 2.2 UNIX标准化 17 2.2.1 ANSI C 17 2.2.2 IEEE POSIX 18 2.2.3 X/Open XPG3 19 2.2.4 FIPS 19 2.3 UNIX实现 19 2.3.1 SVR4 20 2.3.2 4.3+BSD 20 2.4 标准和实现的关系 21 2.5 限制 21 2.5.1 ANSI C限制 22 2.5.2 POSIX限制 22 2.5.3 XPG3限制 24 2.5.4 sysconf、pathconf 和fpathconf 函数 24 2.5.5 FIPS 151-1要求 28 2.5.6 限制总结 28 2.5.7 未确定的运行时间限制 29 2.6 功能测试宏 32 2.7 基本系统数据类型 32 2.8 标准之间的冲突 33 2.9 小结 34 习题 34 第3章 文件I/O 35 3.1 引言 35 3.2 文件描述符 35 3.3 open函数 35 3.4 creat函数 37 3.5 close函数 37 3.6 lseek函数 38 3.7 read函数 40 3.8 write函数 41 3.9 I/O的效率 41 3.10 文件共享 42 3.11 原子操作 45 3.11.1 添加至一个文件 45 3.11.2 创建一个文件 45 3.12 dup和dup2函数 46 3.13 fcntl函数 47 3.14 ioctl函数 50 3.15 /dev/fd 51 3.16 小结 52 习题 52 第4章 文件和目录 54 4.1 引言 54 4.2 stat, fstat和lstat函数 54 4.3 文件类型 55 4.4 设置-用户-ID和设置-组-ID 57 4.5 文件存取许可权 58 4.6 新文件和目录的所有权 60 4.7 access函数 60 4.8 umask函数 62 4.9 chmod和fchmod函数 63 4.10 粘住位 65 4.11 chown, fchown和 lchown函数 66 4.12 文件长度 67 4.13 文件截短 68 4.14 文件系统 69 4.15 link, unlink, remove和rename 函数 71 4.16 符号连接 73 4.17 symlink 和readlink函数 76 4.18 文件的时间 76 4.19 utime函数 78 4.20 mkdir和rmdir函数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值