我有一个这样的程序(适用于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()会返回带有errno 10的-1。有人可以指示我描述BEQ连接可能出现问题的文档吗? 似乎在oracle的内脏中某处已经有wait()调用......
答案 0 :(得分:0)
看一下这篇文章: http://openacs.org/forums/message-view?message_id=187522
重要部分是:
/* Restore SIGCHLD since Oracle10 client has trapped it **SG** */
signal(SIGCHLD, SIG_DFL);
尝试在“popen”调用之前添加它,它应该可以正常工作。
你必须处理甲骨文试图忽略的任何东西,或者让僵尸进程挂起。