2016-11-26 9 views
0

のサンプルコードに従っています。ハッキング:The Art of Exploitation次のコマンドを実行する際に問題が発生しています。ディレクトリが存在しないときに `open`で相対ファイルが開く

datafile = (char *) ec_malloc(20); 
strcpy(datafile, "/tmp/notes"); 

fd = open(datafile, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR); 
if (fd == -1) 
    fatal("in main() while opening file"); 

エラーメッセージは次のとおりです。「いいえそのようなファイルやディレクトリは」前のビットがカスタムfatal()機能を使用して作成され

[!!] Fatal Error in main() while opening file: No such file or directory

/tmp/notesはプログラムの場所には存在しませんが、O_CREATフラグがそれを考慮する必要があることに注意してください。私は".\\tmp\\notes"strcpyセグメントを切り替えようとしましたが、結果は同じでした。プログラムが呼び出されるディレクトリ内にまだ存在しないディレクトリを作成するにはどうすればよいですか?

私はWindows 10でMinGWを使用していて、w/gccをコンパイルしています。

答えて

1

あなたは/tmp/notesが「プログラムの場所に」存在しないと言っています。これは、ディレクトリFOOでプログラムを実行し、FOO/tmp/notesのようなファイルを作成することを期待していることを意味します。しかし、あなたが実際に求めているのは/ tmp/notesです。これは絶対パスです。先頭のスラッシュのないtmp/notesが必要ですが、これもディレクトリとファイルです。open()はディレクトリを作成しません。したがって、現在のディレクトリで開くファイルとしてnotesを使用するか、tmp/notesを使用して最初にmkdir("tmp")を呼び出してください。

+0

ああ、開いてもディレクトリは作成されません。パスを単に「ノート」に変更すると、完全に機能しました。私はO_CREATフラグを誤解しているようです。ありがとう! – aiokos

関連する問題