Страниц: [1]
  Печать  
Автор Тема: openlog() баг или фича?  (Прочитано 4714 раз)
mike
QOR.Moderator
*****
Offline Offline

Сообщений: 1186


Welcome to Lunatic Asylum.


Просмотр профиля WWW
« : Июля 16, 2010, 11:03:50 am »

Код:
int main(int argc, char **argv, char **envp)
{
        openlog("zzz", LOG_PID | LOG_NDELAY, LOG_DAEMON);
        syslog(LOG_NOTICE, "zzz1");
        close(3); // close /dev/log fd
        openlog("zzz", LOG_PID | LOG_NDELAY, LOG_DAEMON);
        syslog(LOG_NOTICE, "zzz2");
        return (EXIT_SUCCESS);
}
и в логах я вижу только
Jul 16 11:03:01 nto zzz[607952922-1]: zzz1
если close(3) убрать то
Jul 16 11:03:38 nto zzz[608026650-1]: zzz1
Jul 16 11:03:38 nto zzz[608026650-1]: zzz2
« Последнее редактирование: Июля 20, 2010, 03:52:53 pm от mike » Записан
qnxloder
Sr. Member
****
Offline Offline

Сообщений: 292


Просмотр профиля
« Ответ #1 : Июля 20, 2010, 03:43:07 pm »

Может фича - менеджера ресурсов...

sin выдает fd с суффиксом S - items suffixed with an s indicate that the connection is a side channel
created with the _NTO_SIDE_CHANNEL flag -- for more information, see
ConnectAttach() in the Neutrino Library Reference

ConnectAttach(): Once created there's no difference in the use of the messaging
primitives on this ID. The C library creates connections at various
times without _NTO_SIDE_CHANNEL (e.g. during open()), however, it's
unlikely that any applications would want to call it this way.

А почему не closelog?
Записан
mike
QOR.Moderator
*****
Offline Offline

Сообщений: 1186


Welcome to Lunatic Asylum.


Просмотр профиля WWW
« Ответ #2 : Июля 20, 2010, 03:47:05 pm »

особенность демона, он после форка все дескрипторы закрывает
Записан
mike
QOR.Moderator
*****
Offline Offline

Сообщений: 1186


Welcome to Lunatic Asylum.


Просмотр профиля WWW
« Ответ #3 : Июля 20, 2010, 04:41:25 pm »

Код:
void openlog(ident, logstat, logfac)
        const char *ident;
        int logstat, logfac;
{
        if (LogFile == -1)
                LogFile = open(_PATH_LOG, O_WRONLY);
}

void closelog()
{
        (void)close(LogFile);
        LogFile = -1;
}
слегка обрезанные функции из libc
т.е. получается когда я делаю close(3), то при следующим вызове openlog() LogFile !=1
Записан
Страниц: [1]
  Печать  
 
Перейти в: