dポイントプレゼントキャンペーン実施中!

C言語でプログラムと同じディレクトリにないファイルを読み込みたいと思っていますが、どうすればよいかが思いつきません。
fopenは使わない(使えない拡張子?)方針です。
今現在、プログラムは読み込みたいプログラムとファイルを同じファイルにおいて実行すれば読み込みますが、本来読み込みたいファイルは共有のサーバーの中にあり、さらに膨大な量のデータのためプログラムや読み込みたいファイルを動かすことはあまり適切ではありません。
そこでincludeのようにbash_profileをいじることでできるようになるのでは?と考えましたが調べてみてもわかりません。
詳しい方どうぞ教えてくださると助かります。

質問者からの補足コメント

  • うれしい

    kmeeさま
    丁寧な説明ありがとうございます。

    fopenを使わないというのは、その拡張子を特殊な外部ライブラリを使って開くようになっているので、fopenのような関数ではなく別の関数を使っているのです。
    その関数を見てもファイルを指定する様子がなかったので、bash_profileをいじればそういうこともできるのでは?と思い詳しい方に聞こうと思った次第です。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/11/19 12:32

A 回答 (4件)

そのプログラムがあるディレクトリ(もしくは、そのプログラムを起動するときのディレクトリ)へ読み込ませたいファイルのシンボリックリンクを作成するのでは、どうでしょう。

    • good
    • 0

そうなると、その「特殊な外部ライブラリ」とやらの内容がわからないことには、どうしようもありません。


マニュアルとか仕様書とかサポートとか制作者とかで確認してください。


その「特殊な外部ライブラリ」はどうやって対象のファイルを決めているのでしょうか?

「カレントディレクトリにある該当拡張子を自動で取得」
ってことだと、それに従うしかありませんし。
・別途にfopenで開いたFILE * を「特殊な外部ライブラリ」に渡している
といった、ファイル名では指定していないけど、対象ファイルについての情報はわたしている、ということもあります。
    • good
    • 0

補足読んでもいまいち不明なんですが…。



特殊なライブラリとやらがファイル名固定で扱っているんですかね?

>本来読み込みたいファイルは共有のサーバーの中にあり、さらに膨大な量のデータのためプログラムや読み込みたいファイルを動かすことはあまり適切ではありません。

nfsなりでマウントしてカレントディレクトリをマウントしたディレクトリに移動させる…とかはダメなんですか?
    • good
    • 0

> includeのようにbash_profileをいじることでできるようになるのでは



等と書いてあるので、 Unix や Linux での話として進めます
Windowsでも同様なのですが、コマンド等が若干違います。


その共有ファイルに
ls /共有フォルダ/〜/〜/ファイル
等としてアクセスできるのなら、C言語からも同様に、ディレクトリを含めた絶対パスや相対パスで指定すれば、アクセスできます。


ファイル名だけ指定すると、カレントディレクトリ(作業ディレクトリ等とも)のファイルにアクセスします。
現在はたまたま、実行ファイルのあるディレクトリがカレントディレクトリになっているので「読み込みたいプログラムとファイルを同じファイルにおいて実行すれば読み込」めるように見えるだけです。

cdでディレクトリを移動して、その実行ファイルを(パス付きで指定して)実行すると、その「読み込みたいプログラムとファイルを同じファイル」が読めなくなります。
その代り、移動したディレクトリにあるファイルが読めるようになります。



> includeのようにbash_profileをいじることでできるようになるのでは

これは、Cコンパイラが 環境変数 の内容を解析して、
ソースに #include <XXX.h> とあったら
fp = fopen("/usr/local/include/XXX.h","r") ;
if (fp==NULL) { fp = fopen("/opt/local/include/XXX.h","r") ; }
if (fp==NULL) { fp = fopen("/usr/include/XXX.h","r") ; }
...
みたいな感じに順番にアクセスするように作られているからです。

fopen自体には、そんな「環境変数に書いてある場所から探す」等という機能はありません。


> fopenは使わない(使えない拡張子?)方針です

使わないのは自由ですが、拡張子によって「使えない」ことはありません。
この回答への補足あり
    • good
    • 0

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