APUE-第五章学习-标准I/O库-习题
2017-02-12 22:35
274 查看
5.1 用setvbuf实现setbuf
5.2 5.8 节中的程序利用fgets和fputs函数复制文件,每次I/O操作只复制一行,若将程序中的MAXLINE改为4,当复制的行超过该最大值时会发生什么情况?对此进行解释。
和原来的结果相同,fgets给定参数n,fgets只能读取n-1个字符(包括换行符),如果有一行超过n-1个字符,那么fgets返回一个不完整的行,也就是说,只读取该行的前n-1个字符,但是,缓冲区总是以null字符结尾,对fgets的下一次调用会继续读该行。
5.3 printf()返回0值意味着什么?
printf()函数的返回值,如果成功,则返回写入的字符总数,否则返回一个负数。也就是写入的字符数为0。
5.4 下面的代码在一些机器上运行正确,而在另外一些机器运行时错误。解释问题所在。
因为getchar返回值为整型,而不是字符型。由于EOF经常被定义为-1。那么如果系统使用的是有符号的字符类型,程序可以正常工作,但是如果使用的是无符号字符类型,则程序会进入死循环。
5.5 为什么tempnam限制前缀为5个字符?
5个字符长的前缀、4个字符长的进程唯一标识再加上5个字符长的系统内唯一标识(进程ID)刚好组成14位的UNIX传统文件名长度限制。
#include "stdio.h" #include "apue.h" void my_setbuf(FILE *restrict fp,char *restrict buf){ if(buf == NULL){ if(setvbuf(fp,buf,_IONBF,BUFSIZ) != 0){ err_quit("setvbuf error!"); } printf("no buf\n"); }else{ if(fp == stderr){ if(setvbuf(fp,buf,_IONBF,BUFSIZ) != 0){ err_quit("setvbuf error"); } printf("no buf\n"); }else if(fp == stdin || fp == stdout){ if(setvbuf(fp,buf,_IOLBF,BUFSIZ) != 0){ err_quit("setvbuf error"); } printf("line buf\n"); }else{ if(setvbuf(fp,buf,_IOFBF,BUFSIZ) != 0){ err_quit("setvbuf error"); } printf("fully buf\n"); } } exit(0); }
5.2 5.8 节中的程序利用fgets和fputs函数复制文件,每次I/O操作只复制一行,若将程序中的MAXLINE改为4,当复制的行超过该最大值时会发生什么情况?对此进行解释。
和原来的结果相同,fgets给定参数n,fgets只能读取n-1个字符(包括换行符),如果有一行超过n-1个字符,那么fgets返回一个不完整的行,也就是说,只读取该行的前n-1个字符,但是,缓冲区总是以null字符结尾,对fgets的下一次调用会继续读该行。
5.3 printf()返回0值意味着什么?
printf()函数的返回值,如果成功,则返回写入的字符总数,否则返回一个负数。也就是写入的字符数为0。
5.4 下面的代码在一些机器上运行正确,而在另外一些机器运行时错误。解释问题所在。
#include <stdlib.h> int main(void){ while((c = getchar()) != EOF) putchar(c); }
因为getchar返回值为整型,而不是字符型。由于EOF经常被定义为-1。那么如果系统使用的是有符号的字符类型,程序可以正常工作,但是如果使用的是无符号字符类型,则程序会进入死循环。
5.5 为什么tempnam限制前缀为5个字符?
5个字符长的前缀、4个字符长的进程唯一标识再加上5个字符长的系统内唯一标识(进程ID)刚好组成14位的UNIX传统文件名长度限制。
相关文章推荐
- apue学习第九天——标准I/O库(第五章)
- APUE学习: 第五章, 标准I/O库
- AUPE学习第五章------标准I/O库
- apue 第五章 标准i/o库
- 《APUE》读书笔记—第五章标准I/O库
- 统计学习导论:基于R应用——第五章习题
- c++ primer(第五版)学习笔记及习题答案代码版(第五章)语句
- APUE第五章学习笔记
- APUE 学习笔记(四) 标准I/O库
- APUE-第一章学习-UNIX基础知识-习题
- APUE学习:标准I/O库
- APUE-第二章学习-UNIX标准化及实现-习题
- Python学习笔记: 第五章课后习题练习
- Scala学习3之快学scala第五章习题之构造器
- 《APUE》笔记-第五章-标准I/O库
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 习题2.8 随机数组的三种生成算法(补) 将bash的实现翻译成比较纯正的bash风格
- 数据结构习题学习笔记(The Fifth Day)
- 数据结构习题学习笔记(The Second Day)
- 为学习APUE(Unix环境高级编程)偷懒,而写的脚本,基本上相当于一个简单的工程创建脚本了
- [技术学习]配合APUE学习贴篇select实现原理分析