Linux 下文件IO编程&进程控制实验
一、基本I/O操作
(1).Linux的输入/输出(I/O)操作,通常为五个方面:打开,读取,写入,定位和关闭;对应的函数分别为:open()、read()、write()、lseek()、close()。他们的原型分别如下:
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
int open(const char * pathname,int flags,mode_t mode);
ssize_t read(int fd,void *buf,size_t nbytes);
ssize_t write(int fd,const void *buf,size_t nbytes);
off_t lseek(int fd,off_t offset,int whence);
int close(int fd);
(2).基本函数的一个共同特点就是,它们都是通过(file descriptor)来完成文件I/O操作的。
在open()函数中:pathname 为字符串,表示被打开的文件名称,可以包含路径;flags 为一个或多个标记,表示文件的打开方式;mode 表示被打开文件的存取权限模式。
在read()和write()函数中:fd 表示文件描述符;buf 指定存储器读出数据的缓冲区;count 指定读出或写入的字节数。
close()函数:当使用完文件时可以用close关闭文件,close会让缓冲区中的数据写回磁盘,并释放文件所占的资源,若文件顺利关闭则返回0,关闭失败则返回-1,并置errno。
二、标准I/O操作
1.fopen()函数:函数原型如下:
#include<stdio.h>
FILE *fopen(const char *pathname,const char *type);
fopen()函数可以指定打开文件的路径和模式,路径由参数path指定,模式相当于open()函数中的标志位flag。
2.fclose()函数,函数原型如下:
int fclose(FILE *fp);
将缓冲区的数据写入文件中,并释放系统所提供的文件资源。
3.fread()函数和fwrite()函数:函数原型如下:
#include<stdio.h>
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,出错或读到文件末尾时返回的记录数小于nmemb,也可能返回0。
fread和fwrite用于读/写记录,参数size指出一条记录的长度,而nmemb指出要读或写多少条记录,nmemb是请求读或写的记录数,fread和fwrite返回的记录数有可能小于nmemb指定的记录数
三、实验教学和目的
1.掌握Linux文件IO编程方法;
2.掌握标准I/O和基本I/O函数的调用方法;
3.掌握进程控制编程,包括进程的创建,启动和终止;
四、实验内容
1、基本IO(非缓冲)操作编程
(1)编写一个基本IO操作的源代码,要求使用到基本IO操作的5个函数:打开、读取、写入、定位和关闭。
(2)编译上述源代码并调试通过,最后对运行结果予以分析验证。
首先是lseek(),将文件位置标记设置为从尾部偏移offset字节位置;open()则创建或打开一个文件,write()则是往文件里写了字符串,read()读取文件内容保存到buffer[ ]中,返回读取字符个数,最后是close(),关闭(fd)。
函数实现的具体功能自拟,提交源代码和对应的运行结果。
2.标准IO(缓冲)操作编程
(1)编写一个标准IO操作的源代码,要求使用到标准IO操作的5个函数:打开、读取、写入、定位和关闭。
(2)编译上述源代码并调试通过,最后对运行结果予以分析验证。
先写后读,然后定位fseek,最后fclose,其次创建一个文件recfile。
函数实现的具体功能自拟,提交源代码和对应的运行结果。
3、进程控制编程
(1)编写程序,使用fork()函数创建子进程,理解父子进程的执行流程;
先执行了父进程,后执行了子进程,调用一次fork(),返回了两次。
(2)编写程序,使用exec函数族,掌握在程序中启动新进程的方法和流程;
此次我用的是exec函数族中的execlp函数,exec函数只有出错的时候有返回值,并没有成功的返回值,execlp中第一个ps是程序名,要在PATH环境变量中找到并执行它,第二个ps是命令行ps,等价于ps -ef。
(3)编写程序,使用exit函数,掌握进程退出函数的使用方法
Exit()是用来终止进程的,程序执行到exit()时,进程无条件停止剩下的所有操作,_exit()是直接使进程停止运行,会立即退出,前面打印的信息无法完整输出。