4

我有一个这样的程序(用于 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 连接到 oracle 时,它​​工作正常。但是当我使用 BEQ 时,pclose() 返回 -1 和 errno 10。有人可以指导我查看描述 BEQ 连接可能问题的文档吗?似乎在 oracle 的内部某处已经有 wait() 调用了……</p>

4

1 回答 1

0

看看这篇文章: http://openacs.org/forums/message-view?message_id= 187522

重要的部分是:

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

尝试在“popen”调用之前添加它,它应该可以工作。

您将不得不处理 Oracle 试图忽略的任何事情,或者让僵尸进程挂起。

于 2011-12-28T19:33:01.927 回答