您的位置:首页 > 编程语言

2014/3/4实验代码

2014-03-11 08:47 190 查看
//daemon_init.c

//创建一个守护进程

#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/param.h>
#include<sys/types.h>
#include<sys/stat.h>
void init_daemon(void) //initialize daemon
{
int pid;
int i;
if(pid=fork()) //end parent process
exit(0);
else if(pid<0) //quit if fail to create
exit(1);
setsid(); //create new dialogue
if(pid=fork())
exit(0); //quit if it's the first child process
else if(pid<0)
exit(1); //quit if fail to create
for(i=0;i<NOFILE;i++) //close opened file description
close(i);
chdir("/tmp"); //change directory to /tmp
umask(0); //reset file create mask code
return;
}

/***********************************************************************************************************************************************************************/

//daemon_test.c

//创建一个守护进程,每隔60秒把当前系统时间存入/tmp/test.log文件中

#include<stdio.h>
#include<time.h>
void init_daemon(void);
int main(int argc,char* argv[])
{
FILE* fp;
time_t t;
init_daemon(); //initialize a daemon
while(1)
{
sleep(60);
if((fp=fopen("test.log","a"))>=0) //open file "test.log"
{
t=time(0);
fprintf(fp,"I'm here at %s\n",asctime(localtime(&t))); //print local time
fclose(fp);
}
}
return 0;
}

/***********************************************************************************************************************************************************************/

//测试main函数的参数含义

#include<stdio.h>
int main(int argc,char* argv[])
{
printf("%d\n",argc);
printf("%s\n",argv[0]);
printf("%s\n",argv[1]);
printf("%s\n",argv[2]);
printf("%c\n",argv[1][0]);
}

//执行./main_argument_test shadow walker的结果:
3
./main_argument_test
shadow
walker
s

/***********************************************************************************************************************************************************************/

//主进程等待子进程结束

#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
int main(int argc,char* argv[])
{
pid_t pid;
char* msg;
int k;
int exit_code;
pid=fork();
switch(pid)
{
case 0: printf("Child process creation succeed.\n");
msg="Child process is running";
k=5;
exit_code=37;
break;
case -1: printf("Process creation failed.\n");
exit(1);
default:exit_code=0;
break;
}
if(pid!=0)
{
int stat_val;
pid_t child_pid;
child_pid=wait(&stat_val);
printf("Child process has exited, pid=%d\n",child_pid);
if(WIFEXITED(stat_val))
{
printf("Child exited with code %d\n",WEXITSTATUS(stat_val));
}
else
{
printf("Child exited abnormally\n");
}
}
else
{
while(k>0)
{
puts(msg);
sleep(1);
k--;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: