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);
}

oracleへのtcp/ip接続を使用すると、問題なく動作します。しかし、BEQを使用すると、pclose()はerrno 10で-1を返します。誰かがBEQ接続で発生する可能性のある問題を説明するドキュメントに私を導くことができますか?オラクルの内臓のどこかに、すでに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」呼び出しの前に追加してみてください。動作するはずです。

ただし、オラクルが無視しようとしているものに対処するか、ゾンビプロセスをハングさせる必要があります。

于 2011-12-28T19:33:01.927 に答える