系统编程知识点
#
行缓存会输出的时机: 行缓存满,程序结束,遇到fflush刷新,遇到换行符。
磁盘通常是全缓存。 标准错误一般是无缓存,希望尽快被输出到终端上。
系统调用api不带缓冲,C库函数api带缓冲。
#
调用read系统调用读取大量磁盘数据时:
先通过df命令查看磁盘文件系统(一般是/dev/sda1) 。
然后通过sudo tune2fs -l /dev/sda1, 查看block size 参数值,
我们每次调用read系统调用去读取的数据大小最好和该值相同,此时读取效率会很高。
#
文件描述符fd是文件描述符表内的数组的下标,可以通过该数组下标进而找到文件表项和i节点。
#
1. cat cat命令执行,无参数时,表示从标准输入(键盘)读取内容,并输出到标准输出。
2. cat filename cat命令后面跟文件名,表示从文件读取内容,并输出到标准输出。
3. cat>filename 表示从标准输入读取内容,并将内容输出到强制新建的filename文件中。
4. cat
记忆法则:
如果使用了<或者>符号,那么大于的一侧(也就是符号开口的那一侧)永远表示输入端。 小于的一侧(也就是尖角的一侧)永远表示输出端。
默认的输入端和输出端就是标准输入和标准输出。
如果单独使用cat filename, 这是执行一个输出动作,即表示将file内容输出到标准输出。
如果只单独使用cat,这是执行一个输入又输出的动作,即表示从标准输入获取内容并输出到标准输出去(行缓冲)。
#
1 . atexit注册多个进程终止处理函数,先注册的后执行(先进后出,和栈一样)
2. atexit()用于注册进程结束时所执行的函数
3. return、exit和_exit的区别:return和exit效果一样,都是会执行进程终止处理函数,但是用_exit终止进程时并不执行atexit注册的进程终止处理函数。
#
Linux中fork后堆、栈、静态全局、文件描述符中哪些是可以共享的?
int pid = fork();父进程pid返回非0,子进程pid返回0.
对于执行fork之前的一些变量总结如下:
当父进程调用fork()创建子进程之后,下列哪些变量在子进程中修改之后,父进程里也会相应地作出改动?
A.全局变量 函数体外变量
B.局部变量 函数体内变量
C.静态变量 static修饰
D.文件指针 文件描述符
E.一般变量指针 堆上动态分配内存
答: 只有D文件指针,也就是文件描述符会发生改变,因为文件描述符存在于系统中,为所有进程共享。
文件指针close时,父子进程都关一次才能最终关闭。
我的相关博文:
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
.