The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Демонизация и потоки"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Демонизация и потоки"  
Сообщение от Wiki on 04-Ноя-06, 01:28 
Всем привет. Подскажите как правильно реализовать перенаправление потока вывода для демона (создаем новый процесс и отвязывает от терминала. stdout бы в файл, м?)

Кусок кода демонизации и перенаправления.

            int pid = fork();
        switch(pid)
        {
            case -1:
                printf("fork error");
                exit(-11);
            break;
            case 0:
                setsid();
                chdir("/");
                
                int stdoutO;
                stdoutO = dup(fileno(stdout));
                
                close(0);
                close(1);
                close(2);
                    
                memset(&sa, 0, sizeof(sa));
                sa.sa_handler = &wc_sighandler;
                sigaction(SIGCHLD, &sa, 0);
                
                    /* - Redirectind stdout - */

                //stdout = fopen(OutputFile,"w+");
                        stdout = freopen(OutputFile, "w+", stdout);
            
                printf("..:[Demonization start. See log file: %s]:..\n", OutputFile);
                ...
                
                printf("..:[Demonization stop. See log file: %s]:..\n", OutputFile);
            
                    /* - Free stdout - */

        //fflush(stdout);
        //fclose(stdout);
        //stdout = fdopen(stdoutO,"w");

            break;
            
            default:
                printf("..:[Demonization start... See log file: %s]:..\n", OutputFile);
                //exit(0);
            break;
        }

Файл создается пустой. Причем есть эту хрень откомпилить и запустить под eclipse - все работает. Из консоли - нет

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Демонизация и потоки"  
Сообщение от perece on 07-Ноя-06, 20:36 
ну что за стиль, блин. полная каша из системных вызовов и ф-й stdio.
если до демонизации ничего в stdout не выводилось, то stdio вообще необязательно знать что-либо о происходящем перенаправлении. все делается на уровне syscall'ов

#ifdef выводилось_че_нть_printfами_до_этого
fflush(stdout);
#endif
close(0);
close(1);
close(2);
fd=open("my_file",O_RDWR);
dup2(fd,1);
close(fd);

"старый стиль" (для юниксов не поддерживающих dup2 syscall):

#ifdef выводилось_че_нть_printfами_до_этого
fflush(stdout);
#endif
fd=open("my_file",O_RDWR); // написал O_RDWR глядя на ваше "w+". а нафига стдауту чтение???
close(1);
dup(fd);
close(fd);
close(0);
close(2);


\^P^/

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру