本周所学内容如下:
1.函数原型
fwrite和fread是以记录为单位的I/O函数,fread和fwrite函数一般用于二进制文件的输入输出。
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);
fread和fwrite函数的返回值:
读或写的记录数,成功时返回的记录数等于nmemb,出错或读到文件末尾时返回的记录数小于nmemb,也可能返回0。
fread和fwrite函数参数的含义:
参数size指出一条记录的长度;
参数nmemb指出要读或写多少条记录,这些记录在ptr所指的内存空间中连续存放,共占size * nmemb个字节;
ptr是指向的某连续内存空间的指针;
stream是文件指针;
fread从文件stream中读出size * nmemb个字节保存到ptr中所指的内存空间中;
fwrite把ptr中的size * nmemb个字节写到文件stream中
2.fork()函数说明
fork()函数用于从已存在的进程中创建一个新进程,新进程称为子进程,而原进程称为父进程。
使用fork()函数得到的子进程是父进程的一个复制品,从父进程处继承了整个进程的地址空间,而子进程所独有的只有它的进程号、资源使用和计时器等,使用fork()函数,执行速度不是很快。
3.exec函数族说明
exec函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新的进程替换了。
4.exit()和_exit()函数说明
exit()和_exit()函数都是用来终止进程的。当程序执行到exit()或_exit()时,进程会无条件地停止剩下的所有操作,清除包括PCB在内的各种数据结构,并终止本进程的运行。
_exit()函数的作用是:直接使进程停止运行,清除其使用的内存空间,并清除其在内核中的各种数据结构:
exit()函数则在这些基础上做了一些包装,在执行退出之前加了若干道工序。
本周实验内容如下:
1.
从键盘输入10个学生的有关数据,然后把它们转存到磁盘文件中。
用gcc来编译保存文件,在./来执行 然后将寝室人员信息输入满
2.
验证磁盘文件stu.txt中是否已存在数据,使用以下程序从“stu.txt”文件中读入数据,然后在屏幕上输出。
3.
创建进程函数fork()
4.
exec族函数则提供了一个在进程中启动另一个程序执行的方法
5.
终止进程的exit()函数和_exit()函数
6.
终止(中断)进程的wait()函数和waitpid()函数
试验中遇到的问题与解决方法如下:
1.在打代码过程中少打了save() 使得txt显示为空,第二个程序不能运行成功
2.在linux下进程相关的基本系统调用中 第一个文件里出现了问题 应将书上的ret=去掉
本次试验花费了两个小时 出现的错误都能及时改正 实验比较成功