LINUX.ORG.RU

socketpair + fdopen


0

0

Не получается использовать fdopen на втором сокете полученном от socketpair.. Ошибка - Неверная операция смещения.

extern volatile sig_atomic_t terminate;

FILE *netstatd()
{
 int fds[2];
 FILE *in,*out;
 int rc;
 char buffer[512];

 rc=socketpair(AF_UNIX,SOCK_STREAM, PF_UNSPEC, fds);

 if (rc<0)
   return NULL;

 in=fdopen(fds[0],"r+");
 
 if (!in)  //Тут все отрабатывает нормально
   {
    close(fds[0]);
    close(fds[1]);
    return NULL;
   }

 out=fdopen(fds[1],"r+");

 if (!out); // Вот тут ошибка!
   {
    syslog(LOG_WARNING,"fdopen %s\n",strerror(errno));
    close(fds[1]);
    close(fds[0]);
    fclose(in);
    return NULL;
   }

 setvbuf(out,NULL,_IONBF,0);
 setvbuf(in,NULL,_IONBF,0);

 rc=fork();

 if (rc==-1)
   {
    fclose(in);
    fclose(out);
    return NULL;
   }
 else if (rc!=0)
   {
    fclose(out);
    return in;
   }

 //child

  fclose(in);

  setproctitle ("netstatd");

  while (!feof(out) && !terminate)
    {
      if (fgets(buffer,sizeof(buffer),out))
        {
         if (terminate)
           {
            syslog(LOG_WARNING,"terminating\n");
            break;
           }

         syslog(LOG_DEBUG,"%s\n",buffer);

        }
    }

  _exit(0);
}
★★★★

Ответ на: комментарий от rymis

Я уже разные варианты режима пробовал. Это ен помогает. Странно, почему первый fdopen не делает seek, а второй зачем-то делает. В чем здесь прикол?

OxiD ★★★★
() автор топика

> if (!out); // Вот тут ошибка!

Мля, это надо быть таким идиотом...

Догадайтесь где косяк =))

OxiD ★★★★
() автор топика
Ответ на: комментарий от Eshkin_kot

Странно, мне он такого ен выдал. я использую -Wall Что еще надо включить? И какая версия gcc?

$gcc --version gcc (GCC) 4.2.3 20071123 (prerelease) (Debian 4.2.2-4) Copyright (C) 2007 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

OxiD ★★★★
() автор топика
Ответ на: комментарий от OxiD

> if (!out); // Вот тут ошибка!

Жесть, давно так не ржал, метко ты однако комменты ставишь, всем бы нам так!

ratatosk
()
Ответ на: комментарий от OxiD

> Странно, мне он такого ен выдал. я использую -Wall Что еще надо включить? И какая версия gcc?

наверное -W (оно же -Wextra), версия из mingw, 3.4 помоему

Eshkin_kot ★★
()
Ответ на: комментарий от php-coder

>Класс! :)))

Скромнее надо выражать свою злобу, пыхкодер, скромнее.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.