gpt4 book ai didi

c - Oracle beq 和 popen()

转载 作者:太空狗 更新时间:2023-10-29 15:42:21 26 4
gpt4 key购买 nike

我有一个这样的程序(用于 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);
}

当我使用到 oracle 的 tcp/ip 连接时,它工作正常。但是当我使用 BEQ 时,pclose() 返回 -1 和 errno 10。有人可以指导我找到描述 BEQ 连接可能出现的问题的文档吗?看来在 oracle 的内部某个地方已经有 wait() 调用了……

最佳答案

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

重要的部分是:

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

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

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

关于c - Oracle beq 和 popen(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7192947/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com