@egorggegor

Почему не работает демон?

Всем привет.
Написал следующий демон, он не работает. Предполагаю это из-за закрытия потоков ввода/вывода, но до конца не понимаю, что нужно исправить, чтобы заработало.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>

int main(int argc, char* argv[])
{
	int fd;
	pid_t process_id = 0;
	pid_t sid = 0;

	process_id = fork();

	if (process_id < 0)
	{
		printf("fork failed!\n");
		exit(1);
	}

	if (process_id > 0)
	{
		printf("process_id of child process %d \n", process_id);
		exit(0);
	}

	umask(0);
	sid = setsid();
	if(sid < 0)
	{
		exit(1);
	}

	chdir("/");

	close(STDIN_FILENO);
	close(STDOUT_FILENO);
	close(STDERR_FILENO);

	while(1) {
		fd = open("/dev/mydev", O_RDONLY);
		read(fd, &buf, 7);
		close(fd);
	}
	return EXIT_SUCCESS;
}


Спасибо.
  • Вопрос задан
  • 340 просмотров
Решения вопроса 1
1. В read наверняка надо передавать buf а не &buf (точно сказать нельзя т.к. описания нет)
2. В зависимости от того, как вы запускаете процесс, дочерний процесс может получить SIGHUP при закрытии родительского процесса или SIGPIPE на printf, стоит добавить обработчики сигналов до fork().
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Vitsliputsli
Не хватает, как минимум:
#include <fcntl.h>

char buf[7];
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы