作业
题目一
守护进程
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <head.h>
int main(int argc, const char *argv[])
{
pid_t cpid = fork();
if(cpid == 0)
{
//创建新会话
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;
}
题目二
打印时钟在终端上,若终端输入quit,结束时钟
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<head.h>
int main(int argc, const char *argv[])
{
pid_t cpid = fork();
if(cpid > 0)
{
while(1)
{
system("clear");
time_t t = time(NULL);
struct tm* local_time = localtime(&t);
printf("%4d-%02d-%02d %02d:%02d:%02d\n",\
local_time->tm_year+1900,local_time->tm_mon+1,local_time->tm_mday,\
local_time->tm_hour,local_time->tm_min,local_time->tm_sec);
pid_t wstatus = -1;
waitpid(cpid,&wstatus,WNOHANG);
if(0 == wstatus)
{
printf("quit\nclock over\n");
return 0;
}
sleep(1);
}
}
else if(cpid == 0)
{
char s[10];
while(1)
{
fgets(s,sizeof(s),stdin);
if(strcmp(s,"quit\n")==0)
{
exit(0);
}
}
}
else
{
ERR_MSG("fork");
return -1;
}
return 0;
}