Oracle бэк и попен () - PullRequest
       20

Oracle бэк и попен ()

4 голосов
/ 25 августа 2011

У меня есть такая программа (для прекомпилятора Pro * C):

#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <errno.h>

EXEC SQL BEGIN DECLARE SECTION;
static VARCHAR ora_connect_str[81];
EXEC SQL END DECLARE SECTION;

EXEC SQL INCLUDE SQLCA;

int main()
{
   FILE *f;
   int rc = 1;
   char *eptr=getenv("DB_LOGIN");

   strcpy(ora_connect_str.arr, eptr);
   ora_connect_str.len = strlen(eptr);

   EXEC SQL CONNECT :ora_connect_str;

   f=popen("exit 0", "r");
   rc = pclose(f);
   printf("errno=%d rc=%d\n", errno, rc);
}

Когда я использую TCP / IP-соединение с оракулом, все работает нормально. Но когда я использую BEQ, pclose () возвращает -1 с ошибкой 10. Может ли кто-нибудь направить меня в документ (ы), описывающий возможные проблемы с соединениями BEQ? Похоже, что где-то в недрах оракула уже есть вызов wait ()…

1 Ответ

0 голосов
/ 28 декабря 2011

Взгляните на этот пост: http://openacs.org/forums/message-view?message_id=187522

Важный раздел:

  /* Restore SIGCHLD since Oracle10 client has trapped it **SG** */
  signal(SIGCHLD, SIG_DFL);

Попробуйте добавить его перед вызовом popen, он должен работать.

Вам придется иметь дело с тем, что Oracle пытается игнорировать, или с зависанием процессов зомби.

...