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


Спасибо.
  • Вопрос задан
  • 374 просмотра
Подписаться 1 Средний 4 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Специалист по информационной безопасности + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик + ИИ
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по информационной безопасности + ИИ
    9 месяцев
    Далее
Решения вопроса 1
1. В read наверняка надо передавать buf а не &buf (точно сказать нельзя т.к. описания нет)
2. В зависимости от того, как вы запускаете процесс, дочерний процесс может получить SIGHUP при закрытии родительского процесса или SIGPIPE на printf, стоит добавить обработчики сигналов до fork().
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Vitsliputsli
Не хватает, как минимум:
#include <fcntl.h>

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

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

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