- 论坛徽章:
- 36
|
本帖最后由 cokeboL 于 2011-06-24 15:41 编辑
回复 gamblegod
我这个例子是没举好。实际情况是这样的情况下,多个子进程都在同一时间创建了文 ...
sumland 发表于 2011-06-24 14:58
按我上个回复的那么改,while放在pid==0的里面就ok了。只差一个花括号的位置。我试了,ok- #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 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+");
-
- pid_t pid;
- pid=fork();
- if(pid<0)
- {
- printf("fork faild!\n");
- exit(1);
- }
- else if(pid>0)
- {
- printf("this is parrent process!child process id is:%ld\n",pid);
-
- }
- else {
- printf("this is child process!\n");
- //} 此处原来的{去掉放下面while之后把while包进来
-
- while(i<120)
- {
- i++;
- sleep(1);
- get_fp(&NowFp,str);
- }
- } //就是放在这里
- return 1;
- }
复制代码 |
|