课后作业:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <IOhead.h>
int main(int argc, const char *argv[])
{
pid_t cpid = fork();
if(0 == cpid)
{
pid_t sid = setsid();
printf("sid = %d\n",sid);
chdir("/");
umask(0);
for(int i = 0;i<getdtablesize();i++)
close(i);
while(1)
{
sleep(1);
}
}
return 0;
}
第二题:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <IOhead.h>
#include <time.h>
int main(int argc, const char *argv[])
{
int run=1;
time_t t;
struct tm *p=NULL;
pid_t cpid = fork();
if(cpid>0)
{
FILE* fd=fopen("11.txt","w");
if(NULL==fd)
{
ERR_MSG("fopen");
return -1;
}
while(1)
{
char a[20];
scanf("%s",a);
if(strcmp(a,"quit")==0)
{
run=0;
fwrite(&run,sizeof(int),1,fd);
fflush(fd);
fclose(fd);
break;
}
}
wait(NULL);
printf("\n时钟结束\n");
}
else if(0 == cpid)
{
FILE* fp=fopen("11.txt","r");
if(NULL==fp)
{
ERR_MSG("fopen");
return -1;
}
int i=0;
while(run)
{
t=time(NULL);
p=localtime(&t);
fseek(fp,0,SEEK_SET);
fread(&run,sizeof(int),1,fp);
fflush(fp);
fflush(stdout);
printf("%d-%02d-%02d %02d:%02d:%02d\r",p->tm_year+1900,p->tm_mon+1,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);
sleep(1);
}
// printf("\n结束\n");
}
return 0;
}
思维导图: