Linux文件I/O----APUE-chapter03练习题答案
来源:互联网 发布:淘宝客大群 编辑:程序博客网 时间:2024/05/24 05:10
因为这是我自己写的肯定会有不足甚至可能错误的地方,如有请各位阅读者指正,可以的话请您直接在博客下面留言,我方便改正.
3.1
当读/写磁盘文件时,本章中描述的函数确实是不带缓冲机制的吗?请说明原因。
实际是带有缓冲机制的,
1. 如read的时候,大多数的文件系统为改变性能都采用某种预读(read ahead)技术,
当检测到正在进行顺序读取时,系统就试图读入比应用所要求的更多数据.
2. 通常write只是将数据排入队列,而实际的写磁盘操作则可能在以后的某个时刻进行。
而数据库系统则需要使用O_SYNC,这样一来当它从write返回时就知道数据已确实写到磁盘上,
以免在系统异常是产生数据丢失
3.2
编写一个与3.12节中dup2功能相同的函数,要求不调用fcntl函数,并且要有正确的出错处理
/** 编写一个与3.12节中dup2功能相同的函数,要求不调用fcntl函数,并且要有正确的出错处理* If oldfd is not a valid file descriptor, then the call fails, and newfd is not closed.* If oldfd is a valid file descriptor, and newfd has the same value as oldfd, * then dup2() does nothing, and returns newfd.*/#include <unistd.h>#include <stdio.h>int mydup2(int oldfd, int newfd);int main(void){ int fd = 0; const int newfd = 10; fd = mydup2(1, newfd); if (newfd == fd) printf("mydup2 ok\n"); return 0;}int mydup2(int oldfd, int newfd){ int fd = 0; int beginfd = 0; int ret = -1; int i = 0; /* Invalid file descriptor */ if (oldfd < 0 || newfd < 0) { printf("oldfd and newfd must be non-negative integers\n"); goto EXIT; } /* newfd == oldfd, returns newfd */ if (oldfd == newfd) { ret = newfd; goto EXIT; } /* newfd != oldfd, close newfd and assign oldfd to newfd */ close(newfd); fd = dup(oldfd); beginfd = fd; while(1) { printf("fd=%d\n",fd); if (newfd == fd) break; sleep(1); fd = dup(oldfd); } /* close file descriptor that open by dup() and doesn't equal newfd */ for (i=beginfd; i!=newfd; ++i) { printf("i=%d\n", i); close(i); } ret = newfd;EXIT: return ret;}
0 0
- Linux文件I/O----APUE-chapter03练习题答案
- 【APUE】文件I/O
- APUE------文件I/O
- apue:文件I/O
- APUE读书笔记-文件I/O
- APUE 1 文件I/O
- APUE笔记……文件I/O
- 《APUE》笔记(1) 文件I/O
- [APUE]第三章:文件I/O
- APUE第三章 文件I/O
- apue第三章文件I/O
- 《apue》读书笔记 第三章 文件I/O
- 【APUE】3、第三章 文件I/O
- APUE学习: 第三章, 文件I/O
- APUE读书笔记-第三章 文件I/O
- apue 第3章 文件I/O
- APUE笔记---第三章文件I/O
- 《APUE》笔记-第三章-文件I/O
- POJ 2777-Count Color(线段树-区间染色查询)
- 形参和实参
- struts2 角色权限 filter(过滤器)和interceptor(拦截器)
- resultMap映射
- Notification的滑动清除和点击删除事件
- Linux文件I/O----APUE-chapter03练习题答案
- git~使用命令速查
- null关键字
- 太虚AR开发从入门到精通-----播放视频
- 出现 org.apache.tomcat.util.bcel.classfile.ClassFormatException 异常的原因及解决方法
- Java方法重写到底调用哪儿一个方法,到底用本类还是父类的成员变量
- 画笔实现的一个简单自定义控件
- caffe_ glog check error, please check log and clear mex ;CURAND_STATUS_LAUNCH_FAILURE
- GitHub 新建repository 下载到本地 并完成 maven项目初始化