fork创建进程

作业:

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值