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--;
}
}
}
//创建一个守护进程
#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--;
}
}
}
相关文章推荐
- git实验之代码提交 .
- [iBoard 电子学堂][8051技术实验教程]发布,包含代码和文档
- 实验三:学生工作管理系统asp和asp.cs代码
- 使用C/C++实现Socket聊天程序(代码+实验报告)
- [Java] 实验5参考代码
- 第六周实验报告(任务二)【补充代码】
- Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏
- 一个自带简易数据集的模拟线性分类器matlab代码——实验训练
- Java 2实用教程(第三版)实验指导与习题解答and实验模版代码及答案(一)
- 洋洋洒洒一大片的aio实验代码
- 图形学实验代码
- [nRF51822] 8、基础实验代码解析大全 · 实验11 - PPI
- 5000次掷骰子实验代码(VB)
- [nRF51822] 11、基础实验代码解析大全 · 实验16 - 内部FLASH读写
- 几行代码简单清理内存,经过实验,效果不错
- 实验二:对试验一进行优化代码
- PLSQL:做实验代码模板
- 统计和输出实验 8 数组2 一次考试中的最高分、最低分、平均分,以及在90~100、 80~89、 70~79、 60~69和60分以下各分数段的人数。程序代码如下
- 使用C/C++实现Socket聊天程序(代码+实验报告)
- 实验二:关于梭哈游戏的代码的测试