2017-08-25 15 views
1

でそのようなファイルやディレクトリはありません私は私が取得するコードを実行するとオープン:O_CREAT

dest_fd = open(fileLocation, O_RDWR | O_CREAT, 0666) 

としてそれを呼び出し、open関数を使用してファイルを作成しようとしています:

fileLocations: /tmp/chatty/libchatty.a 
open: No such file or directory 

を(ファイル位置が相対パスではないことを確認するためにfileLocationの値を表示していることに注意してください)

他のトピックで見つけたものを試しましたが、うまくいかないそれは間違っている可能性がありますか?

答えて

3

O_CREATを使用する場合は、openからこのエラーは、存在しない場合は、作成しようとしているファイル、またはその親の1の親ディレクトリことを意味します。 openはディレクトリ階層全体を作成するわけではありません。必要に応じてmkdirを呼び出すパスを上る必要があります。この場合

、私は

if (mkdir("/tmp/chatty", 0777) && errno != EEXIST) 
    perror_exit("mkdir /tmp/chatty"); 
dest_fd = open("/tmp/chatty/libchatty.a", O_RDWR|O_CREAT|O_EXCL, 0666); 
/* ... */ 

なくmkdirも同様ENOENTに失敗した場合、あなたはおそらくする権限を持っていないので、アップ再帰と/tmpを作成しようとわざわざような何かをするだろうその場合、どんな場合でも/tmpが存在しない場合、何かがひどくコンピュータに間違っています。

+0

ああ、神はそれを知らなかった。 D – NokiStrawby

+0

@NokiStrawby:ファイルへのパスが作成されるようにする関数が必要な場合は、[C++/Linuxでディレクトリツリーを作成するにはどうすればいいですか?]を参照してください。 (https://stackoverflow.com/questions/675039/how-can-i-create-directory-tree-in-c-linux) - コードはC++であり、その逆ではなくC++としてコンパイルされます。 –