プロが教える店舗&オフィスのセキュリティ対策術

 LinuxでC言語のプログラムを作っています。書き込みでファイルをオープンする際に、別のディレクトリにファイルを作成したいのです。しかし普通にターミナルの上でやるような指定の仕方だとうまくいきません。
 以前にWindows環境でfopenの際のパス指定の質問があったみたいですが、Linuxではどのように指定したらいいでしょう…?よろしくお願いします。

A 回答 (3件)

fopenで指定するファイル名は、絶対パス指定と相対パス指定の何れかで行います。


ファイル名を"file"としたとき、
"/aaa/bbb/file"が絶対パス指定です。
相対パス指定は
"file"又は"./file"となります。
これはwindowsの
"c:\\aaa\\bbb\\file"
"file"に相当します。
絶対パス指定で別のディレクトリに"file"を作成したい場合、別のディレクトリが/aaa/bbbであると仮定すると
"/aaa/bbb/file"がfopenで指定するファイル名となります。
相対パス名で指定方法については、現在自分がどこにいるか(どのディレクトリで実行するか)が、問題になります。
絶対パス指定で通常は問題ないので、この方法で行って下さい。どうしても相対パス名で指定したい場合は、その旨補足して下さい。
    • good
    • 0
この回答へのお礼

回答して下さってありがとうございます。何とか解決しました。しかし、まだわからないところがあります。今作っているプログラムを動かすことはできますが。

カレントディレクトリにTESTというディレクトリを作り、その中でfileIOというファイルをオープンさせようとしました。今回、「./TEST/fileIO」 と指定し、無事うまくいきました。しかし、絶対パスを用いるとファイルオープンを失敗してしまいます。「/home/aaa/TEST/fileIO」など。この書き方はおかしいんでしょうか…?

お礼日時:2005/01/15 19:21

>今回、「./TEST/fileIO」 と指定し、無事うまくいきました。

しかし、絶対パスを用いるとファイルオープンを失敗してしまいます。「/home/aaa/TEST/fileIO」など。この書き方はおかしいんでしょうか…?

書き方は正しいです。問題は、"/home/aaa/TEST"が正しいディレクトリ名かということになります。
「./TEST/fileIO」でうまくいったとういことは、カレントディレクトリは、"/home/aaa"とうことになりますが、
これは、正しいでしょうか。pwdコマンドでカレントディレクトリが表示されますので、それで確認してみて下さい。

この回答への補足

No.2の方に返事したとおりディレクトリはコピーペーストなのでおそらく間違ってません。まあ、スペースだとかファイル名の一部だとかいらない部分まで貼り付けてしまったのかもしれませんね。今ちょっと確かめられない状況ですが、後で確かめてみたいと思います。

回答してくださってありがとうございました。

補足日時:2005/01/16 15:12
    • good
    • 0
この回答へのお礼

今確認してみたところ、絶対パスでも出来ました。おそらくコピペのミスだったと思われます。

回答いただいてありがとうございます。No.2の方も、どうもありがとうございます。助かりました。

お礼日時:2005/01/17 14:20

カレントディレクトリが間違っている可能性があります。


#include <unistd.h>
#include <sys/param.h>
char buf[MAXPATHLEN];
getcwd(buf,sizeof(buf));
printf("カレントディレクトリ=%s\n",buf);
などとやってカレントディレクトリを表示させ、間違っていたら


//#include <unistd.h>
chdir("/home/aaa");
とやって、カレントディレクトリを変更します。
    • good
    • 0
この回答へのお礼

ありがとうございます。カレントディレクトリは、合っているんですよね…なにせコピーペーストで指定しましたから。何でだろ…?

お礼日時:2005/01/16 15:09

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A