2
我的代碼看起來在某種程度上是這樣的:叉寫入文件句柄再次
//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
似乎再次被調用,並且有一個新的。"Opened log file..."
在我的日誌
爲什麼會發生這種情況
好的,謝謝!但是在fprintf()完成之後不應該清除緩衝區嗎? – Zulakis
有時是的,有時沒有。我相信stderr會在每一個換行符後自動刷新。但大多數流不會。 –
(這是一件好事,因爲大多數時候你想緩衝,因爲它通過減少所需的系統調用次數來提高性能) –