系统编程知识点

 

#

行缓存会输出的时机: 行缓存满,程序结束,遇到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<filename 表示从文件file读取内容,并将内容输出到标准输出去。

 

记忆法则: 
如果使用了<或者>符号,那么大于的一侧(也就是符号开口的那一侧)永远表示输入端。 小于的一侧(也就是尖角的一侧)永远表示输出端。
默认的输入端和输出端就是标准输入和标准输出。

如果单独使用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时,父子进程都关一次才能最终关闭。

 我的相关博文: https://www.cnblogs.com/happybirthdaytoyou/p/13823641.html


#


#


#


#


#


#


#


#


#


#


#


#


#


#


#

 

 

 

 

 

 

.

posted @ 2020-10-04 18:31  一匹夫  阅读(158)  评论(0编辑  收藏  举报