- 论坛徽章:
- 0
|
本帖最后由 sumland 于 2011-06-24 17:14 编辑
不好意思啊!我还是把整个框架贴上来吧!我也是觉得该在父进程中写文件。不过后来很多子进程都同时新建文件。我的目的是一个一个文件地创建并写入,直到给定的时间间隔,才关闭这个文件并新建,再对新文件写入,。。在每一时刻都只能有一个进程操作文件。代码稍长,而且删减了socket部分。麻烦高手看看- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #include<unistd.h>
- #include<sys/types.h>
- #include<time.h>
- //这个程序的目的在于实现在实时多进程的情况下,每隔一段时间就开一个文件,并对其写入,还要保证之前被关闭的文件不再有新的写入
- typedef struct myfp_info
- {
- FILE *nfp;
- time_t ncreat_time;
- }MYFP_INFO;
- int get_fp(MYFP_INFO *NowFp,char *sw)
- {
- time_t NowTime=time(NULL);
- if((NowTime-NowFp->ncreat_time)>=10)
- {
- printf(" time up\n");
- fclose(NowFp->nfp);
- char namefile[128];
- memset(namefile,0x0,128);
- sprintf(namefile,"/opt/strtmp%d",NowTime);
- NowFp->nfp=fopen(namefile,"w+");
- fwrite(sw,1,strlen(sw),NowFp->nfp);
- char str[]="\n\n";
- fwrite(str,1,strlen(str),NowFp->nfp);
- NowFp->ncreat_time=NowTime;
- printf("ncreat_time1 =%d\n",NowFp->ncreat_time);
- }
- else
- {
- printf("write string:<%s>,len<%d>\n",sw,strlen(sw));
- fwrite(sw,1,strlen(sw),NowFp->nfp);
- char str[]="\n";
- fwrite(str,1,strlen(str),NowFp->nfp);
- }
- return 0;
- }
- MYFP_INFO NowFp; //全局变量
- int main()
- {
- {
- int nPid = fork();
- if(nPid < 0)
- {
- printf("creat daemon fail(%s)!\n", strerror(errno));
- return -1;
- }
- if(nPid > 0)return 0;
- setsid();
- signal(SIGINT, SIG_IGN);
- signal(SIGHUP, SIG_IGN);
- signal(SIGQUIT, SIG_IGN);
- signal(SIGPIPE, SIG_IGN);
- signal(SIGTTOU, SIG_IGN);
- signal(SIGTTIN, SIG_IGN);
- signal(SIGCHLD, SIG_IGN);
- signal(SIGTERM, SIG_IGN);
- signal(SIGUSR1, SIG_IGN);
- signal(SIGUSR2, SIG_IGN);
- umask(0);
- setpgrp();
- }
- int i=0;
- time_t NowTime=time(NULL);
- char str[]="sunstring\n";
- NowFp.ncreat_time=NowTime;
- char namefile[128];
- memset(namefile,0x0,128);
- sprintf(namefile,"/opt/strtmp%d",NowTime);
- NowFp.nfp=fopen(namefile,"w+");
- ...//socket建立过程,略去
- ...//
- while(1)
- {
-
- ...//略去
- pid_t pid;
- pid=fork();
- if(pid<0)
- {
- close(nConnectSocket);
- continue;
- }
- if(pid>0)
- {
- get_fp(&NowFp,str);
- close(nConnectSocket);
- continue;
-
- }
- close(nListenSocket);
- break;
- }
- ...//略去
- ...//
- ...//
- ...//
- return 1;
- }
复制代码 |
|