- 论坛徽章:
- 0
|
我的做法是加文件锁。具体代码如下:
- #include <stdarg.h>
- #include <string.h>
- #include <unistd.h>
- #include <time.h>
- #include <errno.h>
- #include <dirent.h>
- #define MAXARGS 31
- void SDKerrlog( const char *errfile, const char *arglist, ... )
- {
- FILE *fp;
- int fd;
- char path[PATH_MAX];
- va_list args;
-
- sprintf( path, "%s/log/%s", (char *)getenv("HOME"), errfile );
- if( (fp = fopen(path, "a")) == NULL ) {
- fprintf(stderr, "无法打开出错日志文件[%s] %s\n",
- path, strerror(errno) );
- /*return;*/
- fp=stderr;
- }
- fd = fileno(fp);
- lockf(fd, F_LOCK, 0l);
- fprintf( fp, "[%08ld:%06ld] ", current_date(), current_time() );
- va_start( args, arglist );
- vfprintf( fp, arglist, args );
- va_end( args );
- fprintf( fp, "\n" );
- lockf(fd, F_ULOCK, 0l);
- if( fp==stderr )
- return;
- fclose(fp);
- }
复制代码
current_date(), current_time() 是两个自定义输出日期和时间的函数。
这段代码就是wenlq所说的那个程序。至于I/O的问题,我认为在交易系统中这部分操作对性能的影响基本可以忽略。仔细分析一下的话,在OLTP系统中绝大部分I/O是被数据库占用了,而不是写日志。 |
|