Del*_*ted 15 c unix linux fopen
我有一个进程以附加模式打开文件.在这种情况下,它是一个日志文件.示例代码:
int main(int argc, char **argv) {
FILE *f;
f = fopen("log.txt", "a");
fprintf(f, "log entry line");
fclose(f);
}
Run Code Online (Sandbox Code Playgroud)
两个问题:
我正在考虑以最简单的方式执行此操作,或者使用zeromq将管道上的日志条目泵送到日志收集器.
我确实考虑过syslog,但我真的不希望任何平台依赖于该软件.
这个btw的默认平台是Linux.
cni*_*tar 11
我不知道fopen,fprintf但你可以open使用该文件O_APPEND.然后每个都write将在文件的末尾顺利进行(没有与另一个写入混合).
实际上看标准:
与打开的流关联的文件描述符应该被分配和打开,就好像通过使用以下标志调用open()一样:
Run Code Online (Sandbox Code Playgroud)a or ab O_WRONLY|O_CREAT|O_APPEND
所以我想fprintf只要打开文件就可以安全地从多个进程中获取a.
您肯定会有平台依赖性,因为Windows无法处理附加到同一文件的多个进程.
关于同步问题,我认为线路缓冲输出/应该/大部分时间保存,即根据我的基于shell的短测试,超过99.99%的短日志线应该是完整的,但不是每次都是如此.明确的语义肯定是可取的,因为无论如何你都无法独立编写这个hack系统,我建议使用syslog方法.
| 归档时间: |
|
| 查看次数: |
14238 次 |
| 最近记录: |