Мой код выглядит как-то так:вилка пишет указатель_на_файл снова
//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()), fprintf
, похоже, снова вызван, и есть новый . "Opened log file..."
в моем журнале
Почему это происходит
Хорошо, спасибо! Но разве буферы не очищаются после завершения fprintf()? – Zulakis
Иногда да иногда нет. Я считаю, stderr будет автоматически очищаться после каждой новой строки. Но большинство потоков не будет. –
(что хорошо, поскольку большую часть времени вы хотите буферизировать, так как это повышает производительность за счет сокращения количества необходимых системных вызовов) –