unix 环境高级编程阅读笔记1-5章节
来源:互联网 发布:js动态修改css样式 编辑:程序博客网 时间:2024/04/27 11:30
Unix 环境高级编程
读者:注意仅仅是记录自己阅读进度,坚持阅读,没有深度
源代码:
http://www.libpix.org/apue/ 第二版
http://www.apuebook.com/code3e.html 第三版
第1章UNIX基础知识
- 文件和目录 2017年7月20日
- 系统调用和库函数
第2章 UNIX标准话及实现
- 最大文件描述符 sysconf
第3章 文件I/O
- 引言
- 文件描述符 0 1 2
- open函数
O_TRUNC 截短为0
文件名和路径名截短 - create函数
- close函数
内核自动关闭 - lseek函数
错误-1
od -c file.hole - read 函数
- write
常见原因:磁盘已满,超过文件限制 - I/O 效率
Linux ext2 块长4096 - 文件共享
进程表(记录项)–文件表描述符(状态,读写、标志)–v节点(属性)
多个进程写入一个文件 - 原子操作
将多个进程写入操作合并为一个步骤。 - dup和dup2函数
复制文件描述符
另外一种方法fcntl(filedes,F_DUPFD,0)
与fcntl不同的地方,dup2是原子操作,以及errno不同 - sync、fsync和fdatasync函数
保证磁盘上的文件和缓冲区高速缓存内容的一致性。
sync(int files) 修改过,然后冲洗缓冲区,排入写队列 - fcntl函数
注意 记录锁时是一个指针
文件描述符标志
文件状态标志 F_SETFL O_ - ioctl函数
磁盘操作 - /dev/fd
第4章 文件和目录
- 引言
- stat、fstat和lstat函数
- 文件类型
- 设置用户ID和设置组ID
- 文件访问权限
- 新文件和目录的所有权
- access函数
- unmask函数
- chmod和fchmod函数
- 粘住位
- chown、fchown和lchown函数
- 文件长度
du -s file # 查看file空间
wc -c file #统计字符
cat file > file.copy # 填满空洞 - 文件截短
int truncate(const char *pathname, off_t length) ftruncate()
将截短为length - 文件系统
命名该目录的目录项和目录中的.项 - link、unlink、remove和rename项
- 符号链接
- symlink和readlink函数
- 文件的时间
- utime函数
- mkdir和rmdir
- 读目录
- chdir、fchdir和getcwd函数
- 设备特殊文件
- 文件访问权限
- 小结
stat函数,文件属性了解 - 习题
unix对目录的深度有限制吗?
答:无,但是文件名有PATH_MAX
第5章 标准I/O库
- 引言
细节:缓冲区分配、优化长度执行I/O - 流和FILE对象
int fwide(FILE *fp, int mode) mode 参数设定,宽定向(多字节)返回值为正,字节定向为负值,0表示未定向 - 标准输入、标准输出、标准错误
进程预定的三个流。 - 缓冲
- 全缓冲
malloc flush - 行缓冲
遇到换行符时
行缓冲长度固定
冲洗所有行缓冲流 - 不带缓冲流
stderr fputs - 更改缓冲类型
void setbuf(FILE *restrict fp, char *restrict buf);
void setvbuf(FILE *restrict fp, char *restrict buf, int mode, size_t size); - 冲洗流
int fflush(FILE *fp) 是该流所有未写的数据都被传送至内核
- 全缓冲
- 打开流
- 读和写流
- 非格式化I/O
- 一次一个字符
- 每次一行 fgets和fputs
- 直接I/O fread和fwrite
- 输入函数
- 非格式化I/O
- 每次一行I/O
- fgets gets
- fputs puts
- 标准I/O的效率
二进制I/O
#include<stdio.h>
size_t fread(void *restrict ptr,size_t size, size_t nobj, FILE *restrict fp);
size_t fread(void *restrict ptr,size_t size, size_t nobj, FILE *restrict fp);定位流
- ftell 和fseek
- ftello 和 fseeko
- fgetpos 和 fsetpos
- 格式化I/O
- 格式化输出
printf
fprintf
sprintf在该数组的尾端自动加一个null字节,但该字节不包括在返回值中。
snprintf 显示指定缓冲区大小,避免缓冲溢出。
vprintf(,va_list arg) 可变参数 - 格式化输出
scanf() 同printf…
- 格式化输出
- 实现细节
调用dup或者fcntl 函数将要调用int fileno(FILE *fp) - 临时文件
char *tmpname(char *ptr) #创建一个与现有文件名不相同的现有路径名
FILE *tmpfile(void) #临时文件库,关闭该文件或程序自动删除 - 标准I/O的替代软件
- 效率不高 两次复制
内核与标准I/O之间
标准I/O与用户程序的行缓冲之间
mmap—映射文件
- 效率不高 两次复制
- 小结
I/O缓冲技术
阅读全文
0 0
- unix 环境高级编程阅读笔记1-5章节
- Unix环境高级编程阅读笔记(1)
- 20151117《Unix环境高级编程》阅读笔记:前言
- unix环境高级编程(阅读笔记)----线程同步
- UNIX环境高级编程(阅读笔记)——线程属性
- UNIX环境高级编程(阅读笔记)---线程相关函数
- UNIX环境高级编程(阅读笔记)---多线程信号
- Unix环境高级编程(阅读笔记)----可靠信号
- Unix环境高级编程(阅读笔记)----sigaction函数
- Unix环境高级编程(阅读笔记)----sigsuspend函数
- 《unix环境高级编程》笔记1
- unix环境高级编程 笔记1
- UNIX环境高级编程笔记-1
- 《 Unix环境高级编程 》1~5章笔记
- 《 Unix环境高级编程 》笔记
- 《 Unix环境高级编程 》笔记
- 《 Unix环境高级编程 》笔记
- Unix环境高级编程 笔记
- java线程 1
- framebuffer模板类
- 问 为什么react的组件要super(props)
- 【PHP】PHP中加密函数的应用
- 百练_2883:Checking order
- unix 环境高级编程阅读笔记1-5章节
- TCP的三次握手协议
- Oracle将数据导出到CSV文件
- AOP
- CNN基本概念及网络结构
- 浅谈函数调用过程(栈帧)
- python程序设计基础--函数(下)
- python2.7 安装xgboost
- 哈夫曼树