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

这次实验代码数量颇多,用时比较长,不过增添了许多经验,还是很充实的,以下是学习的知识
第四节:
fwrite和fread是以记录为单位的I/O函数,fread和fwrite函数一般用于二进制文件的输入输出。
函数原型分别是:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
返回值:成功时返回的记录数等于nmemb,出错或读到文件末尾时返回0。
fread和fwrite函数他们的作用是读写记录,而且是一个二进制文件。
ptr它是一个指针,它是记录一串长度的字节。
size就很明显了就是读取文件的大小,以字节做单位。
nmemb要读入多少记录。size是读取记录的大小,二者不能混淆。
stream是一个FILE类型的指针,它也是一个输入输出流。
总结下这个函数的大致流程:
首先size规定每条记录的长度,nmemb规定要读出写出多少条记录,这些记录在ptr指针所指的内存空间中连续存放,fread函数从文件stream中读出信息保存到ptr中,而fwrite正好相反,把ptr中信息写到文件stream中。
在测试程序中发现fopen("stu.txt","wb") 中fopen函数有很多注意的地方。
源码:FILE * fopen(const char * path, const char * mode)
用来以指定的方式打开文件 用FILE修饰。
path参数是包含了路径的文件名,我们测试的程序里没有写路径,那么它默认就是在当前目录下,如果没有这个文件,系统会自动创建。
mode为文件打开方式。有很多参数,这里就罗列一些我们常用的吧:
wb--以只写方式打开或新建一个二进制文件,只允许写数据。
rb--以读方式打开一个二进制文件,只允许读数据。
a--以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
二进制和文本模式的区别:
在windows系统中,文本模式下,文件以"\r\n"代表换行。若以文本模式打开文件,并用fputs等函数写入换行符"\n"时,函数会自动在"\n"前面加上"\r"。即实际写入文件的是"\r\n"
在Linux系统中文本模式下,文件以"\n"代表换行。所以Linux系统中在文本模式和二进制模式下并无区别。

第五节:
进程函数fork()

fork函数是程序中的分叉函数。
返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程标记;
否则返回-1。
作用:正在执行的一个进程进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程。
函数原型:pid_t fork( void);

exec族函数

exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容。exec函数族的函数执行成功后不会返回,因为调用进程的实体被新的内容取代,只留下进程ID等一些表面上的信息仍保持原样,只有调用失败了才会返回一个-1,从原程序的调用点接着往下执行。

总结遇到的错误:
数组argv和envp忘记用NULL结束,程序会报错误。

exit()函数和_exit()函数

exit()就是退出程序,exit(0)表示正常退出,其他表示非正常退出exit(1)
_exit()用法跟上述一样,但是它们还是有细微的差别的。
exit与_exit的区别
_exit():直接使进程停止运行,清除其使用的内存空间。
exit():在执行退出之前加了若干道工序,在停止进行。
exit()函数在调用exit系统调用之前要检查文件,需要清理I/O缓冲。

waitpid()函数

函数作用:
waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程结束。
函数原型:pid_t waitpid(pid_t pid,int * status,int options)
pid是一个标识符如果pid为-1就等待任何一个子进程,如果pid>0
就是等待pid指定的那个进程结束。
options是一个或多个标致符按位“或”的结果。可以用WNOHANG返回
status是一个int类型指针。

posted @ 2017-05-21 14:00  lixiangwei  阅读(118)  评论(0编辑  收藏  举报