2014025654《嵌入式系统程序设计》第五周学习总结
1.标准I/O提供缓冲
2.fread()函数
在文件被打开后,可对文件进行读写等操作,其中读操作的函数为fread()
函数原型 size_t fread (voidptr,size_t size,size_t nmemb,FILEstream)
ptr:存放读入记录的缓冲区
size:读取的记录大小
nmemb:读取的记录数
stream:要读取的文件流
函数返回值
成功:返回实际读取的nmemb数目
失败:EOF
3.fwrite()函数
fwrite()函数用于对确定的文件流进行写操作。
函数原型 size_t fwrite (constptr,size_t size,size_t nmemb,FILE*stream)
ptr:存放写入记录的缓冲区
size:写入的记录大小
nmemb:写入的记录数
stream:要写入的文件流
函数返回值
成功:返回实际读取的nmemb数目
失败:EOF
fwrite()和fread()用于读写记录、用于二进制文件的术如何输出。
fwrite()是按二进制写入,所以写入数据所占空间是根据数据类型来确定。
fread()读取文件,可安全用于二进制文件。
4.fork()函数fork()函数将运行着的程序分成几乎一样的两个进程,
每个进程都启动从代码的同一位置开始执行的线程,这两个进程中的线程继续执行。
fork()返回值
在fork函数执行完毕创建新进程成功出现两个进程,一个是子进程,一个是父进程。
在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。
可以通过fork返回的值来判断当前进程是子进程还是父进程。
fork出错的两种原因
(1)当前的进程数已经达到了系统规定的上限,这时errno的值被设置为EAGAIN。
(2)系统内存不足,这时errno的值被设置为ENOMEM。
5.exec()函数
在Linux中使用exec()函数有两种情况
当进程认为自己不能再为系统和用户做出任何贡献时,就可以调用任何exec() 函数
一个进程想执行另一个程序,那么它就可以调用fork函数新建一个进程,然后调用任何一个exec()函数
容易执行失败,所以一定要加上错误判断语句。
常见错误:
找不到文件或路径
数组argv和envp没有用NULL结束
没有对应可执行文件的运行权限
execle和execve可以向执行进程传递环境变量,但不会继承Shell进程的环境变量,
而exel,execlp,execv,execvp继承Shell进程的所有环境变量。
6.终止程序函数exit()和_exi()函数
exit: void exit(int status)
_exit: void _exit(int status)
exit()和_exit() 函数终止进程,执行操作时,进程停下剩下的操作。但是两个函数略有不同,
_exit()直接终止进程,exit()在终止进程前对目前文件的使用情况进行调查,把文件缓冲区的内容写回文件。
7.waitpid函数
使父进程阻塞,在linux中实现wait()函数调用的就是waitpid()函数。
waitpid函数de参数
pid>0时,只等待进程等于pid的子进程,不收其他进程的影响
pid=-1时,等待任何一个子进程
pid=0时,等待同一个进程组中的任何子进程
pid<-1时,由pid的绝对值绝对进程组