练习2:1.用文件Io以读写的方式打开一个文件,2.利用fork()函数创建子进程3.父进程循环从键盘输入数据写入到文件,子进程利用usleep(200)休眠200us,
(1)用文件IO,以读写的方式打开文件.(2)利用fork创建子进程。父进程利用fegets从键盘输入数据,写到文件中。书写完毕后,调用lseek()定位到头部。若是用户输入“quit" ,结束输入循环。(3)子进程循环调用read函数,读取数据。若是读到的数据是0,说明读到文件尾部,调用continue继续读。否则若是读取数据。正常数据。若是读到"quit",结束读取循环。
代码:
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<string.h>
int main(int argc, const char *argv[])
{
int fd;
char buf[1024]={0};
char childbuf[1024]={0};
pid_t pid;
pid=fork();
fd=open(argv[1],O_RDWR|O_CREAT|O_TRUNC,0666);
if(fd<0)
{
perror("Fail to open");
return -1;
}
if(pid<0)
{
perror("Fail to fork");
return -1;
}
else if(pid==0){
usleep(200);
while(1)
{
read(fd,childbuf,sizeof(childbuf));
if(childbuf[0]==0)
continue;
printf("read %ld types:%s\n",strlen(childbuf),childbuf);
if(!strncmp(childbuf,"quit",4)==0)
break;
}
}
else
{
while(1)
{
fgets(buf,sizeof(buf),stdin);
if(!strncmp(buf,"quit",4)==0)
break;
}
int n=write(fd,buf,sizeof(buf));
lseek(fd,-n,SEEK_CUR);
}
close(fd);
return 0;
}
运行结果: