unix 环境高级编程阅读笔记1-5章节

Unix 环境高级编程

读者:注意仅仅是记录自己阅读进度,坚持阅读,没有深度
源代码:

http://www.libpix.org/apue/ 第二版

http://www.apuebook.com/code3e.html 第三版

第1章UNIX基础知识

  1. 文件和目录 2017年7月20日
  2. 系统调用和库函数

第2章 UNIX标准话及实现

  1. 最大文件描述符 sysconf

第3章 文件I/O

  1. 引言
  2. 文件描述符 0 1 2
  3. open函数
    O_TRUNC 截短为0
    文件名和路径名截短
  4. create函数
  5. close函数
    内核自动关闭
  6. lseek函数
    错误-1
    od -c file.hole
  7. read 函数
  8. write
    常见原因:磁盘已满,超过文件限制
  9. I/O 效率
    Linux ext2 块长4096
  10. 文件共享
    进程表(记录项)–文件表描述符(状态,读写、标志)–v节点(属性)
    多个进程写入一个文件
  11. 原子操作
    将多个进程写入操作合并为一个步骤。
  12. dup和dup2函数
    复制文件描述符
    另外一种方法fcntl(filedes,F_DUPFD,0)
    与fcntl不同的地方,dup2是原子操作,以及errno不同
  13. sync、fsync和fdatasync函数
    保证磁盘上的文件和缓冲区高速缓存内容的一致性。
    sync(int files) 修改过,然后冲洗缓冲区,排入写队列
  14. fcntl函数
    注意 记录锁时是一个指针
    文件描述符标志
    文件状态标志 F_SETFL O_
  15. ioctl函数
    磁盘操作
  16. /dev/fd

第4章 文件和目录

  1. 引言
  2. stat、fstat和lstat函数
  3. 文件类型
  4. 设置用户ID和设置组ID
  5. 文件访问权限
  6. 新文件和目录的所有权
  7. access函数
  8. unmask函数
  9. chmod和fchmod函数
  10. 粘住位
  11. chown、fchown和lchown函数
  12. 文件长度
    du -s file # 查看file空间
    wc -c file #统计字符
    cat file > file.copy # 填满空洞
  13. 文件截短
    int truncate(const char *pathname,off_t length) ftruncate()
    将截短为length
  14. 文件系统
    命名该目录的目录项和目录中的.项
  15. link、unlink、remove和rename项
  16. 符号链接
  17. symlink和readlink函数
  18. 文件的时间
  19. utime函数
  20. mkdir和rmdir
  21. 读目录
  22. chdir、fchdir和getcwd函数
  23. 设备特殊文件
  24. 文件访问权限
  25. 小结
    stat函数,文件属性了解
  26. 习题
    unix对目录的深度有限制吗?
    答:无,但是文件名有PATH_MAX

第5章 标准I/O库

  1. 引言
    细节:缓冲区分配、优化长度执行I/O
  2. 流和FILE对象
    int fwide(FILE *fp,int mode) mode 参数设定,宽定向(多字节)返回值为正,字节定向为负值,0表示未定向
  3. 标准输入、标准输出、标准错误
    进程预定的三个流。
  4. 缓冲
    • 全缓冲
      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) 是该流所有未写的数据都被传送至内核
  5. 打开流
  6. 读和写流
    • 非格式化I/O
      1. 一次一个字符
      2. 每次一行 fgets和fputs
      3. 直接I/O fread和fwrite
    • 输入函数
  7. 每次一行I/O
    • fgets gets
    • fputs puts
  8. 标准I/O的效率
  9. 二进制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,FILE *restrict fp);

  10. 定位流

    1. ftell 和fseek
    2. ftello 和 fseeko
    3. fgetpos 和 fsetpos
  11. 格式化I/O
    • 格式化输出
      printf
      fprintf
      sprintf在该数组的尾端自动加一个null字节,但该字节不包括在返回值中。
      snprintf 显示指定缓冲区大小,避免缓冲溢出。
      vprintf(,va_list arg) 可变参数
    • 格式化输出
      scanf() 同printf…
  12. 实现细节
    调用dup或者fcntl 函数将要调用int fileno(FILE *fp)
  13. 临时文件
    char *tmpname(char *ptr) #创建一个与现有文件名不相同的现有路径名
    FILE *tmpfile(void) #临时文件库,关闭该文件或程序自动删除
  14. 标准I/O的替代软件
    • 效率不高 两次复制
      内核与标准I/O之间
      标准I/O与用户程序的行缓冲之间
      mmap—映射文件
  15. 小结 I/O缓冲技术

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...