2014025635《嵌入式程序设计》第五周学习总结

fork()函数:

一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。  一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。fork()函数从已存在的进程中创建一个新进程。父进程→子进程,子进程几乎是父进程的复制,其所独有的只有它的进程号、资源使用和计时器等。子进程继承了父进程的整个地址空间,包括进程上下文、代码段、进程堆栈等。 父子进程的一个重要区别是:fork()的返回值不同。父进程中返回子进程的进程号,子进程中返回0。 出错为-1。

fread()函数:读取文件函数

定义函数:size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream);

函数说明:fread()用来从文件流中读取数据.
参数stream 为已打开的文件指针, 参数ptr 指向欲存放读取进来的数据空间, 读取的字符数以参数size*nmemb 来决定. Fread()会返回实际读取到的nmemb 数目, 如果此值比参数nmemb 来得小, 则代表可能读到了文件的尾或有错误发生, 这时必须用feof()或ferror()来决定发生什么情况.

返回值:返回实际读取到的nmemb 数目。

终止程序函数exit()和_exit()函数:

_exit()函数:直接使进程停止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构;_exit()函数的作用是直接使进程停止运行,使文件读写的速度加快;而exit()函数先会“清理I/O缓冲”,若想要保证数据的完整性,最好使用exit()函数。

void _exit(int status); status用于传递进程结束的状态,一般来说,0表示正常结束,其他数值表示非正常结束。 实际编程时,可以用wait()系统调用接收子进程的返回值,从而针对不同的情况进行不同的处理。

exit()函数则在这些基础上作了一些包装,在执行退出之前加了若干道工序。

exit()函数与_exit()函数最大的区别就在于 exit()函数在调用 exit 系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件。

 

wait()函数和waitpid( )函数:

wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或者该进程接收到了一个指定的信号为止。如果父进程没有子进程或者它的子进程已经结束,则wait()会立即返回-1. wait()会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果在调用wait()时子进程已经结束,则wait()会立即返回子进程结束状态值。子进程的结束状态值会由参数status 返回,而子进程的进程识别码也会一快返回

wait()函数的语法:

#include<sys/types.h>

#include<sys/wait.h>

pid_wait (int *status);

status指向的整型对象用来保存子进程结束时的状态; 若成功则返回回收的子进程的进程号,失败则返回-1;

 

waitpid()的作用与wait()一样,但它并不一定等待第一个终止的子进程。waitpid()有若干选项,可提供一个非阻塞版本的wait()功能。实际上,wait()只是 waitpid()函数的一个特例,在linux内部实现wait()函数时直接调用的就是waitpid()函数。waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果在调用 waitpid()时子进程已经结束,则 waitpid()会立即返回子进程结束状态值。 子进程的结束状态值会由参数 status 返回,而子进程的进程识别码也会一起返回。

waitpid()函数的语法: 

#include<sys/types.h>

 #include<sys/wait.h> 

pid_waitpid( pid_t  pid , int *status, int options );  

参数说明:pid: 

pid>0,回收进程ID等于pid的子进程 

pid=-1,回收任何一个子进程,此时和wait()相同 

options: 

WNOHANG  若指定的子进程没有结束,则waitpid()不阻塞而立即返回,此时返回值为0; 

WUNTRACED 为了实现某一个操作,由pid指定的任一子进程已被暂停,且其状态自暂停以来没有报告过,则返回其状态。 

 返回值:已经结束的子进程的进程号(>0); 

posted on 2017-05-23 20:44  刘沐枫  阅读(150)  评论(0编辑  收藏  举报