第五章 标准I/O库 课后练习题
来源:互联网 发布:java 开发棋牌类游戏 编辑:程序博客网 时间:2024/06/08 03:00
习题
5.1 用setvbuf实现setbuf
/************************************************************************* > File Name: mysetbuf.c > Author: Dennis > Mail:wdennis051@gmail.com > Created Time: 2017年09月22日 星期五 17时35分44秒 ************************************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <time.h>#include <wait.h>#include <fcntl.h>#include "dennis.h"void my_setbuf(FILE *restrict fp, char *restrict buf){ //if buf is NULL, then turn off buffer if (buf == NULL){ if (setvbuf(fp, buf, _IONBF, void) < 0) err_say("setvbuf"); } else if (fp == stdin || fp == stdout){//if fp point to a tty device if (setvbuf(fp, buf, _IOLBF, BUFSIZ) < 0) err_say("setvbuf"); } else { if (setvbuf(fp, buf, _IOFBF, BUFSIZ) < 0) err_say("setvbuf"); }}
5.2 图5-5中的程序利用每次一行I/O(fgets 和 fputs函数)复制文件。若将程序中的MAXLINE改为4,当复制的行超过该最大值时会出现什么情况?对此进行解释。
复制的行超过最大值
5.3 printf返回0值表示什么
表示输出到stdout的是空字符串
int main(){ int result; result = printf(""); printf("printf(hello) return %d\n",result); return 0;}
5.4 下面的代码在一些机器上运行正确,而在另外一些机器运行时出错,解释问题所在。
#include <stdio.h>intmain(void){ char c; while ((c = getchar()) != EOF) putchar(c);}
对char的解释不同导致了错误
有些编译器将char 当作有符号整数 -127 - 128 这种情况下,不会出错。
而有些编译器将char 当作无符号整数 0 - 255,由于EOF=-1D ,而char只能大于0,导致c 无法得到EOF,从而陷入死循环。
5.5 对标准I/O流如何使用fsync函数
fsync将住留在缓冲区高速缓存的数据块写入磁盘。而标准I/O函数将数据写入自己的缓冲区。要先调用fflush() 将数据冲刷到内核的缓冲区高速缓存,然后使用fileno函数将文件指针转换为file descriptor后,调用fsync函数
5.6 在图1-7和图1-10程序中,打印的提示信息没有包含换行符,程序也没有调用fflush函数,请解释输出提示信息的原因是什么?
每次调用fgets时都会自动冲刷缓冲区。
阅读全文
0 0
- 第五章 标准I/O库 课后练习题
- 第五章 标准I/O库
- apue 第五章 标准i/o库
- 第五章 标准I/O库
- 第五章标准I/O库
- 第五章 标准I/O库
- 第五章 标准I/O库
- UNP第五章 标准I/O库
- AUPE学习第五章------标准I/O库
- APUE学习: 第五章, 标准I/O库
- APUE读书笔记-第五章 标准I/O库
- 《APUE》笔记-第五章-标准I/O库
- APUE-第五章学习-标准I/O库-习题
- 第五章 文件I/O、高级I/O、标准I/O、mmap映射
- apue学习笔记(第五章 标准I/O)
- apue学习第九天——标准I/O库(第五章)
- APUE学习笔记3——第五章——标准I/O库
- UNIX环境高级编程——第五章-标准I/O库
- kotlin学习笔记——集合及集合操作符
- pThread ,NSThread的深入理解
- GPU 版 TensorFlow failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
- spring boot caffeine cache 缓存学习
- 使用javascript获取父级元素
- 第五章 标准I/O库 课后练习题
- [数位DP + AC自动机] Codeforces #434C. Tachibana Kanade's Tofu
- javascript断点调试
- 复用类
- POJ2369
- Android高级的总结
- 【常识】户型图要怎么看?买房时销售员不会说的注意事项
- 使用localstorage.setItem()存储对象
- 基于Echart.js一点总结