Linux编程手册学习笔记2

第十一章:系统限制和选项

两种方式获得系统限制和选项:编译程序时通过头文件;程序运行时通过sysconf、pathconf、fpathconf函数获取。

一、系统限制:运行时恒定值、路径名变量值、运行时可增加值。getconf命令可以获取限制和选项。

二、运行时获取系统限制和选项:sysconf获取,Linux通过setrlimit能够修改资源限制:RLIMIT_NOFILE,RLIMIT_NPROC,RLIMIT_STACK。

三、运行时获取与文件相关的限制和选项:pathconf(采用路径)和fpathconf(文件描述符);

四、不确定的限制:
可采用策略:_POSIX_*_MAX形式命名的变量,往往该值限制之低超乎实际情况;通过errno进行重试;自行编写程序或者函数,估算;GNU Autoconf之类的扩展工具;

五、系统选项:选项常量一经定义,其值为-1(不支持),0(可能支持,程序运行时检查),大于0(实现并支持);

第十二章:系统和进程信息

系统和进程信息的访问方法;重点讨论/proc文件系统;uname调用获取各种系统标识;

一、/proc文件系统:

/proc/PID,/proc/self;/proc/PID/task(线程相关信息);/proc/net,/proc/sys等子目录;

二、系统标识:

uname系统调用返回一系列关于主机系统的标识信息,存储在utsbuf所指向的utsname结构体;linux的/proc/sys/kernel目录下提供了ostype、osrelease和version三个文件,/proc/version文件也有对应字段;nodename对应sethostname设置,domainname由setdomainname调用设置,linux对应由/proc/hostname和/proc/domainname文件来查看和设置主机名和NIS域名;readdir函数遍历目录;

第十三章:文件I/O缓冲

系统I/O和标准c库I/O在操作磁盘文件时会对数据进行缓冲,本章讨论两种类型的缓冲对应用程序性能的影响,以及可以屏蔽和影响缓冲的各种技术和直接I/O技术来绕过缓冲;

一、文件I/O的高速缓冲区:缓冲区高速缓冲
缓冲区大小对I/O系统调用性能的影响;用户空间和内核空间之间的数据传递所花费的时间成本远远小于实际的磁盘IO操作。

二、stdio库的缓冲:

1、设置一个stdio流的缓冲模式:setvbuf,setbuf,setbuffer;

2、刷新stdio缓冲区:fflush;文件定位函数(fseek,fsetpos,rewind);

3、控制文件I/O的内核缓冲:强制刷新内核缓冲区到磁盘;
同步I/O数据完整性和文件完整性:

用于控制文件I/O内核缓冲的系统调用:fsync(文件完整),fdatasync(数据完整),linux非标系统调用sync_file_range(更精准的控制,能够指定刷新的文件区域,并且还能指定标志以控制该系统调用遇到写磁盘时是否阻塞),sync(刷新所有内核缓冲区到磁盘);linux内核线程pdflush(30s未经显示同步的内核缓冲区,该线程进行刷新,/proc/sys/vm/dirty_expire_centisecs规定时间);
使所有写入同步:O_SYNC标志(文件完整),影响性能;2.6.33内核版本实现:O_DSYNC标志(数据完整);O_RSYNC标志,结合前面两个标志一起使用,未来版本可能实现;

4、I/O缓冲小结:
Linux编程手册学习笔记2_第1张图片

5、就I/O模式向内核提出建议:posix_fadvise;linux特有的readahead;

6、绕过缓冲区高速缓存 :直接I/O(direct或raw);O_DIRECT标志;直接I/O对齐限制;

7、混合使用库函数和系统调用进行文件I/O:标准c语言库函数fileno(返回文件流打开的设备描述符,等效于fp->_file)和fdopen(套接字和管道使用stdio库函数,使用此函数创建文件流);

你可能感兴趣的:(学习笔记)