民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

zoom RSS Visual C++ の _open と GNU C Library の open の微妙な違い

<<   作成日時 : 2008/05/18 08:45   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

やっとMingw上でGnu Tarがコンパイルできたと思ったら、変なところでつまずいた。できあがったtar.exeで通常ファイルのアーカイブはできるのだが、フォルダ(ディレクトリ)のアーカイブがうまくいかない。必ず「アクセス権限がありません」(エラー EACCESS)となってしまう。ソースを追いかけていくとどうも低水準IOのopen関数を呼び出しているところでこのエラーが発生している様子。そこで、このopenに色々な変数を与えてテストしてみた。その結果分かったことは以下のとおり。
LinuxなどGNU C Libraryを用いている場合はopen関数でとディレクトリをオープンすることができるが、Mingw上のopen関数でディレクトリをオープンしようとすると、失敗し、必ずエラーEACCESSとなってしまう。
Mingwのopen関数が、おそらくは内部でmsvcrt.dllの(すなわちVisual C++と同様の)_openを呼び出しているのが原因だと思われる。手元のVisual C++のマニュアルによると、「_openでディレクトリを開こうとすると、アクセス権限エラーが発生します」となっている。
結果が分かってしまえば大して難しい問題ではないのだが、ここまでたどり着くのにかなり時間がかかった。
さて、こうなっている以上、Gnu TarをWindows上でコンパイルして使うというハードルがかなり高くなってしまったと考えざるを得ないのだが、どうしたものか。Windows上で_openに代わる関数が見つからないのだから。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Visual C++ の _open と GNU C Library の open の微妙な違い 民芸的プログラミング 〜ソフトウェア開発日記〜/BIGLOBEウェブリブログ
文字サイズ:       閉じる