gpt4 book ai didi

c - fork 再次写入文件句柄

转载 作者:行者123 更新时间:2023-12-02 19:19:34 27 4
gpt4 key购买 nike

我的代码看起来像这样:

//INCLUDES

FILE *file;

void handlesocket(int socket);
int main(int argc, char *argv[])
{
openlog("daemon", LOG_PID, LOG_USER);
syslog(LOG_INFO, "daemon started.");
file = fopen("/var/log/daemon.log","a+");
fprintf(file,"Opened log file...");

while (1) {
pid = fork();
if (pid == 0) {
handlesocket(socket);
exit(0);
}
else close(socket);
}
}

void handlesocket(int socket)
{
//handle socket
}

基本上,它正在等待新的连接,然后自行 fork 。 (我删除了所有套接字代码,以便更容易阅读。

我的问题是,每次有新连接进入(并且调用新的 fork() 时),fprintf 似乎会再次被调用,并且有一个新的“打开的日志文件...” 在我的日志中。

为什么会发生这种情况?

最佳答案

Fork 完全复制了该过程 - 包括 fprintf 使用的缓冲区。您需要在 fork 之前刷新文件句柄,以便您的 fork 进程以清除 io 缓冲区的方式启动:

fprintf( file, "opening log file\n" );
fflush( file );

关于c - fork 再次写入文件句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11181419/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com