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);

时间: 2024-08-05 15:24:54

2014025635《嵌入式程序设计》第五周学习总结的相关文章

201405644 嵌入式程序设计第五周学习总结

嵌入式课程设计第五周学习总结 标准 I/O 编程 标准 I/O 提供流缓冲的目的是尽可能减少使用 read()和 write()等系统调用的数量.标准 I/O 提供了 3 种类型 的缓冲存储.全缓冲.行缓冲.不带缓冲. 打开文件 打开文件有三个标准函数,分别为:fopen().fdopen()和 freopen().其中 fopen()可以指定打开文件的路径和模式,fdopen()可以指定打开的文件描述符和模式,而 freopen() 除可指定打开的文件.模式外,还可指定特定的 I/O 流. f

2014025689 嵌入式程序设计 第七周学习总结

嵌入式程序设计 第七周   第七周课程主要学习了有名管道和消息队列的传输和接收.   一丶有名管道   有名管道和无名管道的区别: 1.  有名管道定义:可以使互不相关的两个进程实现彼此通信的管道就是有名管道.有名管道可以通过路径名来指出,并且在文件系统中是可见的.在建立了管道之后,两个进程就可以把它当作普通文件一样进行读写操作,使用非常方便.不过值得注意的是,FIFO 是严格地遵循先进先出规则的,对管道及 FIFO 的读总是从开始处返回数据,对它们的写则把数据添加到末尾,它们不支持如 lsee

2014025644 嵌入式程序设计 第七周学习总结

嵌入式程序设计 第七周 有名管道 有名管道和无名管道的区别 (1) 无名管道:管道是半双工的,数据只能向一个方向流动:需要双方通信时,需要建立起两个管道:只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程). 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中. 数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出.写入的内容每次都添加在管道缓冲区的末尾,并且每次都是

2014025637《嵌入式程序设计》第一周学习总结

学习总结 1.安装软件以及初识linux总结 <嵌入式程序设计>这门课程开了一周,我从没有安装软件到能够写一个简单的程序,这其中有很多的问题,刚开始安装软件时安装软件有很多的错误,以至于重装了一次系统,由于种种原因上课时没能跟上老师的步伐进行复习,好在在课下的时候找时间都进行了练习,复习了一下以前的操作符命令. 2.上课编程作业 利用gcc打印hello word vi命令是新建一个文件 ls命令是显示列表 3.实验楼作业 在linux中,最重要的是命令,包含了两个过程,就是输入和输出 输入就

2014025689《嵌入式程序设计》第一周学习总结

这一周主要学习了vim的使用和Linux的一些基本的操作,并在电脑上操作 一.vim的基本指令 vi的使用 创建目录的命令:mrkdir+目录 将一个目录下的文件拷贝到另一个目录下:cp /原目录 /新目录 进入目录:cd+目录 设定行号命令:set number 移至指定行:行号G 删除行:dd 复制该行:将光标移到该行yy 粘贴:p 将光标移到最后一行行首:G或者shift+g 撤销:u 光标移动到指定字符:/+指定字符 gcc编译的操作方法 gcc test.c -o test gcc -

2014025654 《嵌入式程序设计》第一周学习总结

本周学习内容 通过本次的实验和第一周的课程,让我对linux有了基本我了解.在上课的过程中和实验时,使我对linux有了非常大的兴趣.操作系统的出现解决了电脑上程序上的问题,在最开始的操作系统,它是非常有局限性的,浪费时间,浪费了精力.UNIX的出现是非常必要的,UNIX 实现了 TCP/IP 协议栈,成为了早期工作站的操作系统的一个流行选择.在大学校园里,它成为了主流,但随之而来的是价格的提高.昂贵的价格让许多计算机专业的人感到苦恼.于是,LINUX 的出现显得格外珍贵.LINUX支持Wind

2014025627 《嵌入式程序设计》第二周学习总结

教材学习内容总结 通过本周的学习,我学会使用gcc编译器.使用GDB调试器和C程序的编写. 通过做实验楼的实验,我对基本操作有了一定的实践和了解. 一开始总是打错,但后来慢慢改正了. 在这遇到了问题,没有某个文件或目录 改正后输出了正确结果 第二个实验是练习Makefile,通过这个实验,我学会Makefile基本规则,熟悉使用make命令的方法并学会使用Makefile程序的编写. 一开始创建目录时出现了错误,显示权限不够,后来加了sudo,问题得到了解决. 因为代码打错出现了错误,及时改正后

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

<嵌入式系统程序设计>第五周学习总结 一.6.5(标准I/O编程)主要涉及的函数及知识点 标准的I/O的三种缓冲存储:全缓冲.行缓冲.不带缓冲. 1. 全缓存:当填满标准I/O缓存后才进行实际的I/O操作 2. 行缓存:当输入或输出中遇到行结束符时,标准I/O库执行I/O操作 3. 不带缓存:标准I/O库不对字符进行缓冲 打开文件的三个标准函数:  fopen().fdopen()和 freopen(). -fopen()可以指定打开文件的路径和模式 函数原型:FILE * fopen(con

20165301 2017-2018-2 《Java程序设计》第五周学习总结

20165301 2017-2018-2 <Java程序设计>第五周学习总结 教材学习内容总结 第七章:内部类与异常类 内部类 在一个类中定义另一个类 非内部类不可以是static类 匿名类 一个子类去掉类声明后的类体 用bank的一个子类(匿名类)创建对象 new Bank(){ 匿名类的类体 } 和接口有关的匿名类 new Computable(){ 实现接口的匿名类的类体 } 异常类 异常对象可以调用如下方法得到或输出有关异常信息 public String getMessage();

20165115 2017-2018-2 《Java程序设计》第五周学习总结

20165115 2017-2018-2 <Java程序设计>第五周学习总结 教材学习内容总结 第七章学习的内容是内部类与异常类.其中,异常类在解决错误情况的处理上就有很大的作用.特别是在实际操作一些大的程序时,如果不进行边界检测,让程序对可能出现的错误情况做出反应,就很可能会导致实际运行时出现各种各样的问题.我对第七章的内容稍微总结了一下: try-catch语句 Java使用try-catch语句来对异常情况进行处理.其中,try部分放入可能出现的异常情况,当其中某个方法调用发生异常后,t