实现功能
以写的方式打开一个文件,通过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;
}