作业:
1用文件IO以读写的方式打开文件
2利用fork创建子进程,
3.父进程循环从键盘输入数据写入文件,子进程利用usleep(200)休眠200us,然后循环从文件中读取数据打印到屏幕,如果父进程输入“quit”,父子进程结束
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
char buf[128] = {0};
//打开文件标识符
int fd = open(argv[1],O_RDWR | O_CREAT | O_TRUNC,0666);
//判断文件是否成功打开
if(fd < 0)
{
perror("open file false\n");
return -1;
}
//创建子进程
pid_t pid = fork();
ssize_t num;
//判断子进程是否打开,并分开写子进程和父进程代码
if(pid < 0)
{
perror("create pid false\n");
return -1;
}else if(pid == 0)
{
usleep(200);
while(1)
{
num = read(fd,buf,sizeof(buf));
if( strncmp(buf,"quit",4) == 0 )
break;
write(1,buf,num);
}
}else if(pid > 0)
{
while(1)
{
//从终端读取字符
fgets(buf,sizeof(buf),stdin);
int size = strlen(buf);
//跳出循环的条件
if( strncmp(buf,"quit",4) == 0 )
break;
//写入文件
write(fd,buf,size);
//光标重置到开始写的位置
lseek(fd,-size,SEEK_CUR);
}
}
close(fd);
return 0;
}