- 论坛徽章:
- 15
|
本帖最后由 yulihua49 于 2014-08-18 10:25 编辑
unistd 发表于 2010-04-13 10:34 ![]()
突然想起一个问题来,就是好多个进程或者线程同时往一个日志文件里写东西,会不会发生第一个进程写了一条日 ...
多进程用文件锁或同步写。多线程用互斥锁。- va_start(vlist,fmt);
- pthread_mutex_lock(&log_mutex);
- vfprintf(stderr,ufmt,vlist);
- fflush(stderr);
- pthread_mutex_unlock(&log_mutex);
- va_end(vlist);
复制代码 多进程打开文件时:- pthread_mutex_lock(&log_mutex);
- if(!*LOGFILE || strcmp(LOGFILE,fn)) {
- strcpy(LOGFILE,fn);
- ret=stat(LOGFILE,&sbuf);
- if(ret<0 || ((today-timezone)/86400-
- (sbuf.st_ctime-timezone)/86400)>0) mode="w";
- efd=freopen(LOGFILE,mode,stderr);
- if(efd) {
- fd=fileno(efd);
- fflag=fcntl(fd,F_GETFL,0);
- if(fflag>=0)
- ret=fcntl(fd,F_SETFL,fflag|O_DSYNC);
- pthread_mutex_unlock(&log_mutex);
- return 1;
- } else {
- fprintf(stderr,"open logfile %s:errno=%d,%s\n",
- LOGFILE,errno,strerror(errno));
- efd=freopen("/dev/null","w",stderr);
- }
- }
- fflush(stderr);
- fseek(stderr,0,SEEK_END);
- pthread_mutex_unlock(&log_mutex);
复制代码 |
|