UNIX(AIX)上でOracle8iを読むCのバッチプログラムを書いています。
(諸事情でプログラムもOracleDBもUNIX上に置きます。)
Oracle Programmerのプリコンパイル機能を使えば割と簡単にSQLが扱える
のはわかったのですが,これ以外に例えばODBCドライバーを使って接続する
方法があれば教えていただきたいのですが。。。
FAQやサンプル・コードなど紹介いただければありがたいです。

A 回答 (1件)

UNIXからORA8iを読むのでしたら、やはりProCが一番妥当


ではないでしょうか?
proC自体が、バッチ用に開発されており大量のデータのやりとりも
考慮されています。
proCでは、OO4Oと同様ORACLEのバージョンUP時に互換
性が無いケースもあるので、十分注意してください。

P.S 回答になってなくてごめんなさい。
    • good
    • 0
この回答へのお礼

ありがとうございます。
やはり,ProCですか。。。。

予算を工面せねば。。。。むむむ

お礼日時:2001/10/31 08:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QCプログラムをUNIXで使いたい

 メーカーで解析の仕事をしている者です。
 解析用コンピュータのOSは「IRIX」です。またそれとは別に自分のデスクにパソコン(Windows2000)があります。
 解析ソフトからの出力ファイルを使って計算するプログラムをC言語で作成して、「Windowsのパソコンで」使用しています。

 WindowsのパソコンにCコンパイラは入っていますが、解析用コンピュータには入っていないので仕方なくそうしています。

 解析用コンピュータでこのプログラムが使えれば便利なのですが、できないため現状は計算するたびに何度も何度も行ったり来たりしなければならず、とても不便です。
 解析用コンピュータにCコンパイラを導入するのは結構なお金がかかるという理由で難しい状況です。
 何か良い方法はないでしょうか。教えてください。よろしくお願いします。

Aベストアンサー

#4です。

> 書き足らずで申し訳ありませんが、今まさにその方法でやっていると思います。

私が言いたかったのは、ちょっと違います。「Windows *から* IRIX *を* 遠隔操作できる」との事だったので、下記の通り考えました。

(1) Windows 上で端末(例えば TeraTerm 等)を起動する(以後「ローカル端末」)。

(2) ローカル端末より、IRIX に遠隔でログインする(以後、遠隔でログインしたIRIXを「リモートホスト」)。

(3) 端末ソフトには大抵「ログの保存」機能があるので、このログ保存を開始した状態で、リモートホスト上の解析ソフトを実行する。

(4) (3)の結果、解析結果が画面上に表示された(流れた)なら、それは ローカルの(ログ)ファイルとして保存される。

(5) ログを停止して、ローカルのログファイルを、Windows 上の Cプログラムで計算。

--
もしも、解析結果が画面に流れず、最初からファイルに落ちるのなら、ローカル側(Windows側)か、リモート側(IRIX側)のどちらかに ftpd 等を動かしておき、それとは逆側で ftp client 等を起動して転送する。

もしくは、ローカル端末でログを開始して、リモートホストで cat コマンド等を使って結果のファイルを画面に出力して、そのログをとっても良い。

--
何れにしても、自分はローカル側に居るだけで、決してリモート側まで歩いていく必要はありません("ローカル"や"リモート"ってややこしいですね^^ でも、この概念は頭に入れておかれて損は無いと思います)。

==
最後に、gcc の HOME 以下への install ですが、google 等で、「gcc configure prefix」などと検索すると、色々な手がかりが見付かると思います。

#4です。

> 書き足らずで申し訳ありませんが、今まさにその方法でやっていると思います。

私が言いたかったのは、ちょっと違います。「Windows *から* IRIX *を* 遠隔操作できる」との事だったので、下記の通り考えました。

(1) Windows 上で端末(例えば TeraTerm 等)を起動する(以後「ローカル端末」)。

(2) ローカル端末より、IRIX に遠隔でログインする(以後、遠隔でログインしたIRIXを「リモートホスト」)。

(3) 端末ソフトには大抵「ログの保存」機能があるので、このログ保存を開始した状態...続きを読む

Qソケット通信でチャットプログラム(unix c言語)

c言語のソケット通信でチャットプログラムを作り中です
仕様:あるクライアントからメッセージがサーバに送信された時点でサーバは接続されたいる全てのクライアントにメッセージを送信する。

以下のようにクライアントからの接続(accept)がある度に、その返り値であるファイルディスクリプタにに対するreadと全クライアントに対するwriteの処理を行うchild関数をforkで起動します。これだとforkが起動した時点での全てのファイルディスクリプタ(接続されている全クライアント)の情報をchild関数に渡せますが、それ以降増え続けていくファイルディスクリプタの情報をchild関数に渡せないので、最初の方に接続したクライアントからのメッセージをそれ以降接続した他のクライアントに送信できないという状態です。

main()
{
  socket()
  bind()
  listen()
    while(1){
      accept()
      if(fork()==0) {
       child()
      }
    }
}

child()
{
  select()
  if(FD_ISSET()) {
    read()
    write()
  }
}
※forkやソケット通信に関してかなり初心者なので、ソースや説明分が意味不明かもしれませんがよろしくお願いします。

c言語のソケット通信でチャットプログラムを作り中です
仕様:あるクライアントからメッセージがサーバに送信された時点でサーバは接続されたいる全てのクライアントにメッセージを送信する。

以下のようにクライアントからの接続(accept)がある度に、その返り値であるファイルディスクリプタにに対するreadと全クライアントに対するwriteの処理を行うchild関数をforkで起動します。これだとforkが起動した時点での全てのファイルディスクリプタ(接続されている全クライアント)の情報をchild関数に渡せます...続きを読む

Aベストアンサー

子プロセス自身がその他の子プロセスにデータを出すのではなくて、一度親プロセスにデータを渡し、親プロセスが全ての子プロセスにデータを配信するように作ればいいと思います。親プロセス側は子プロセスと pipe() で繋げばいいんじゃないでしょうか。(UNIX系OSの場合。でもその他のOSでもパイプってありますよね?)

ちなみに accept() で接続がなかったときに停止させないようにする方法は fcntl() で O_NONBLOCK を設定すればできます。pipe() の入出力でデータがないときに停止させないようにするには select() を使えばできます。

QUNIXの"find"コマンド同等のプログラム作成について

お世話になっております。
現在UNIXの"-type f"オプションのついた"find"コマンドと同等のプログラムをC言語で作ろうとしています。
つまりディレクトリ内のファイル(サブディレクトリ内のファイル含む、ディレクトリは除外)を全てフルパスで表示するプログラムです。
現在下記の関数を作成したのですがうまく動いてくれません。
どなたかご教授いただけないでしょうか。

【問題】
プログラム内の(**)前後で"dir1"が変更される。
(**)前:"/ディレクトリA/"
(**)後:"/ディレクトリA/ディレクトリA内のファイル1"
本当は"dir1"には:"/ディレクトリA/"のままであってほしいです。
"strcat"コマンドの仕様が影響しているのでしょうか。

int _find(char dir1[] , int k ,int l , int m )
{
DIR *dir ;
struct dirent *dp ;
struct stat statbuf ;
char txt[1000] ;
if ( m == 0 ) l++ ;
if ( (dir = opendir(dir1)) == NULL ){
printf("%s",dir1) ;
perror("opendir") ;
exit(1) ;
}
for( dp=readdir(dir) ; dp != NULL ; dp=readdir(dir) ){
if ( strcmp(dp->d_name,".") != 0 && strcmp(dp->d_name,"..") != 0 ){
/* ROOT_DIR名-にファイル名を付け加えて、フルパスにする */
strcpy( temp[k][l] , dir1) ;
strcat( temp[k][l] , "/" ) ;
strcat( temp[k][l] , dp->d_name ) ;  (**)
stat( temp[k][l] , &statbuf ) ;

if(S_ISDIR(statbuf.st_mode)){
l=_find(temp[k][l],k,l,1) ;
}else{
sort[k][l]=temp[k][l] ;
printf("temp[%d][%d]=%s\n",k,l,sort[k][l]);
printf( "dir5=%s\n",dir1) ;
l++ ;
}
}
}
closedir(dir) ;
return l ;
}

お世話になっております。
現在UNIXの"-type f"オプションのついた"find"コマンドと同等のプログラムをC言語で作ろうとしています。
つまりディレクトリ内のファイル(サブディレクトリ内のファイル含む、ディレクトリは除外)を全てフルパスで表示するプログラムです。
現在下記の関数を作成したのですがうまく動いてくれません。
どなたかご教授いただけないでしょうか。

【問題】
プログラム内の(**)前後で"dir1"が変更される。
(**)前:"/ディレクトリA/"
(**)後:"/ディレクトリA/ディレ...続きを読む

Aベストアンサー

以下のようにして下さい。
int _find(char dir1[] , int k ,int l , int m )
の中で、
(1)char temp_dir[256];を宣言する。
(2)
if(S_ISDIR(statbuf.st_mode)){
l=_find(temp[k][l],k,l,1) ;
}else{

l=_find(temp[k][l],k,l,1) ;を
strcpy(temp_dir,temp[k][l]);
l=_find(temp_dir,k,l,1) ;
上記の2行に置き換える。
temp[k][l]で渡されたのを、dir1で受け取りますが、
その後、temp[k][l]へファイル名をセットしているため、
dir1自体が同じ領域なので、結果的にdir1が破壊されたように見えます。これを防ぐには、一旦、temp_dirの格納し、それをdir1として渡します。

QUNIX環境でのCプログラム上でCPU使用率を取得する方法の質問

CPU使用率を取得し、そのデータを送信するプログラムを作成したいのですが、プログラム上でCPU使用率を取得する方法がわかりません。
申し訳ありませんが、どなたか教えていただけないでしょうか?

Aベストアンサー

どうしても、自分でプログラムを書かないといけない事情があるのでしたらともかく、vmstatやMRTGを使うのが常道だと思います。

@IT:メモリやCPUなどの利用状況を調べるには
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/088vmstat.html

@IT:MRTGによるサーバ監視システムの構築
http://www.atmarkit.co.jp/flinux/rensai/root08/root08a.html

QUNIX上のプログラムで使うライブラリの中身を知る方法

過去にUNIX上で動作するプログラムを作成していて、その中で多数の.aや.so(標準では無く、オリジナルのもの。)を使っているのですが、.aや.so内にどのような関数があるのか、もしくはそのライブラリに関係するソース名は何か知る手段ってありませんか?
かなり前のものなので、関数仕様書もmakefileも無いため、何をライブラリとしているのか分からず困っています。
駄目もとで、バイナリエディタで中身を確認してみたのですが、何処の情報がそれを示しているかいまいち分かりませんでした。

Aベストアンサー

No.2 の方がご回答されているように、nm コマンドを使えばシンボルの一覧を表示できます。

(ex.1)
$ nm /usr/local/lib/libssl.so
U ASN1_INTEGER_get
U ASN1_INTEGER_set
U ASN1_check_infinite_end
U ASN1_dup
U ASN1_get_object
U ASN1_object_size
U ASN1_put_object
U BIO_callback_ctrl
U BIO_copy_next_retry
U BIO_ctrl
U BIO_f_buffer
00027db0 T BIO_f_ssl

ただし、U となっているものはライブラリ内で未定義のシンボル (変数や関数) であり、他のライブラリによって解決されなければならないものだったと思います。

また、ライブラリが strip コマンドによって strip されてしまっている場合はシンボルテーブルが削除されてしまうため確認できません。

(ex.2)
$ nm /usr/lib/libstdc++.so.5
nm: /usr/lib/libstdc++.so.5: シンボルがありません

No.2 の方がご回答されているように、nm コマンドを使えばシンボルの一覧を表示できます。

(ex.1)
$ nm /usr/local/lib/libssl.so
U ASN1_INTEGER_get
U ASN1_INTEGER_set
U ASN1_check_infinite_end
U ASN1_dup
U ASN1_get_object
U ASN1_object_size
U ASN1_put_object
U BIO_callback_ctrl
U BIO_copy_next_retry
U BIO_ctrl
U BIO_f_buffer
00027db0 T BIO_f_ssl

ただし、U となって...続きを読む


人気Q&Aランキング

おすすめ情報