Задать вопрос
@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;
}


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

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

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

Похожие вопросы