实现功能

以写的方式打开一个文件,通过fork创建进程,
在一个进程中每隔3秒把当前时间写入文件,
另一个进程中每隔2秒把当前时间写入文件,
分别写五次。然后查看文件的变化。

源代码

/* 功能:以写的方式打开一个文件,通过fork创建进程, 在一个进程中每隔3秒把当前时间写入文件, 另一个进程中每隔2秒把当前时间写入文件, 分别写五次。然后查看文件的变化。 制作:幻竹涂 时间:2019年11月20日。 */
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>

#include <errno.h>

int main(int argc,char* argv[])
{
   
	
	register int i = 0;
	int fd;
	time_t t = 0;
	struct tm* p = NULL;
	if(argc < 2) //命令行输入
	{
   
		printf("Usage: %s <filename>",argv[0]);
		return -1;
	}
	/*打开目录行输入的文件,不存在则创建*/
	if((fd = open(argv[1],O_WRONLY | O_CREAT)) < 0)
	{
   
		perror("open");
		return -1;
	}

	pid_t pid = fork();	//创建一个子进程
	if(pid < 0)
	{
   
		perror("fork");
		close(fd);
		return -1;
	}

	if(pid == 0)   //进入所创建的子进程
	{
   
		char buf[40] = {
   0}; 
		for(i = 0;i < 5;i++)
		{
   
			t = time(NULL);	//获取本地时间以秒为单位
			p = localtime(&t);//转换所获得时间
			sprintf(buf,"child:%4d年%02d月%02d日\t%02d:%02d:%02d \n",p->tm_year+1900,p->tm_mon+1,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);
			write(fd,buf,strlen(buf));//将获取到的时间字符串写入目标文件
			sleep(3);  //延时3秒
		}
		close(fd);
		exit(0);
	}
	else   //进入父进程
	{
   
		char buf[40] = {
   0}; 
		int res;
		wait(&res);
		for(i = 0;i < 5;i++)
		{
   
			t = time(NULL);
			p = localtime(&t);
			sprintf(buf,"parents:%4d年%02d月%02d日\t%02d:%02d:%02d \n",p->tm_year+1900,p->tm_mon+1,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);
			write(fd,buf,strlen(buf));
			sleep(2);	
		}
		close(fd);
	}	
	return 0;
}

运行结果