
当方C初心者です。シリアルポートからデータを取得するプログラムを模索中です
で、みつけたサンプルプログラムをMicrosoft Visual Studio .net 2003でコンパイルしたところ
c:\documents and settings\デスクトップ\source1.c(5): fatal error C1083: インクルード ファイルを開けません。'dir.h': No such file or directory
と出てきます。インクルードファイルdir.hはMicrosoft Visual Studio .net 2003にはないということなのでしょうか、どのように対処すればようのでしょうか、、
ご存知の方お教えください。よろしくお願いします

No.1ベストアンサー
- 回答日時:
日本語を無視して英語のエラーメッセージを見れば一目瞭然!
'dir.h'というインクルードファイルが見つからないということです。
まず、デスクトップにソースファイルを作らないで、
C:\Project\sample\hoge.c
のように、スペースや日本語を含まないパス名にサンプルをコピーしてでコンパイルが通るか試してみる。
それでダメならば・・・
'dir.h'がユーザが定義したファイルでない(ソースパスに存在しない)
ならば、通常のWindowsでは使わない(関数のプロトタイプなどが定義してある)(あるいは、このバージョンから使わないことになった)ファイルだとおもわれます。
ということで・・・
もしユーザ定義ファイルなら
#include <dir.h>
となっていたら
#include "dir.h"
とか、して様子をみる。
あるいはソースパスからインクルードファイルを検索するように設定されているか確認してみる。
もしユーザ定義ファイル「ではない」なら
とりあえず、エラーメッセージをクリックしてソースコードを開いて・・・
/*
#include <dir.h>
*/
とかいうふうにコメントアウトして、どんなコンパイルエラーが増えるか様子をみてみるとか。
で、(プロトタイプがないとか、未定義の関数なんてかんじの)コンパイルエラーがあったら、何をする関数かしらべて、類似する関数があるかどうかなどを調べて移植の方針を決定すると。
この回答への補足
ありがとうございます、
/*
#include <dir.h>
*/
にしてみると、下記のようなエラーが出てきました。
c:\serial\Source1.c(38) : error C2079: 'first' が 未定義の struct 'ffblk' で使用しています。
c:\serial\Source1.c(79) : warning C4013: 関数 'outportb' は定義されていません。int 型の値を返す外部関数と見なします。
c:\serial\Source1.c(80) : warning C4013: 関数 'inportb' は定義されていません。int 型の値を返す外部関数と見なします。
c:\serial\Source1.c(86) : warning C4013: 関数 'inport' は定義されていません。int 型の値を返す外部関数と見なします。
c:\serial\Source1.c(90) : warning C4013: 関数 'findfirst' は定義されていません。int 型の値を返す外部関数と見なします。
c:\serial\Source1.c(94) : error C2224: '.ff_fsize' : 左側が構造体、共用体ではありません。
c:\serial\Source1.c(94) : warning C4047: '関数' : 間接参照のレベルが 'int' と 'unsigned char [8]' で異なっています。
c:\serial\Source1.c(94) : warning C4047: '関数' : 間接参照のレベルが 'char *' と 'int' で異なっています。
c:\serial\Source1.c(94) : error C2198: 'itoa' : 関数へのポインタを通して実行される呼び出しに対する引数が少なすぎます。
c:\serial\Source1.c(101) : error C2224: '.ff_fsize' : 左側が構造体、共用体ではありません。
c:\serial\Source1.c(114) : error C2224: '.ff_fsize' : 左側が構造体、共用体ではありません。
c:\serial\Source1.c(138) : warning C4047: '!=' : 間接参照のレベルが 'int' と 'void *' で異なっています。
関数 'outportb' は定義されていません というのは、dir.hがないせいでしょうか、なければ移植しないといけないのでしょうか?移植というのは、他の関数を適用するということでしょうか?また、移植というのはどのようにすればいいのでしょうか?
#include "dir.h"としても、エラーの表示内容は変わりませんでした。
初心者につき、初歩的なことを聞いてしまっているかもしれませんが、よろしくお願いします。

No.4
- 回答日時:
移植という言葉は「機能しない個所を機能するモノに置き換える」ということです。
英語ではportingです。よく新聞やテレビで臓器移植なんていうふうに移植という言葉を使っているでしょう。
さて、エラーメッセージで注目するのは「関数 'hogehoge' は定義されていません。int 型の値を返す外部関数と見なします。」のようになっているところです。
'hogehoge'という名前の関数がライブラリには存在していないと思われるので、代用できる関数を探すか、'hogehoge'を自力で用意するかのいずれかの作業がないかぎり、コンパイルすら出来ないということです。
ここでは、エラーメッセージより'outportb' 'inportb' 'inport' 'findfirst'という名前の関数がどんな働きをするはずだったかを調べるて、代替となる関数を作るということになります。
が・・・
こういった移植作業は初心者には難易度が高いです。
話を少し変えて、回答No.3で指摘されてるようにPOSIX規格の関数であるならばRedHut Cygwin環境 http://sources.redhat.com/cygwin/ と併用するのが移植する手段の一つにあります。
また、Microsoft Visual Studio .net 2003でディレクトリを扱う低水準関数はdirect.hというファイルにプロトタイプ宣言がありますが、POSIX規格とは名前も使いかたの雰囲気も異なります。
No.3
- 回答日時:
はるか昔、SDKのPOSIXライブラリを利用していたころdir.hをVCで使ったことはありますが、、
今もあるかどうかは不明です。
現実的には、No.1,2 さんの方法で回避するのが手だと思いますが、
ちなみに、dir.h は、
opendir, closedir, seekdir といったディレクトリ操作関数のプロトタイプ宣言ですので、VCで書き直すとしたら、FindFirstFile 関数で置き換えていくしかないと思います。
すみません、お役にたてませんが、、、
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Arduinoに関する質問 4 2023/08/07 21:19
- 画像編集・動画編集・音楽編集 DVD Styler トラブル解決方法 6 2022/10/29 16:00
- その他(プログラミング・Web制作) Pythonを勉強しています。 5 2023/08/25 09:51
- Windows 10 Visual StudioとVisual C++ Build Toolsについて 1 2023/04/16 03:42
- UNIX・Linux bashでブランク(空白)を検索文字列として指定する方法 1 2022/04/13 22:29
- Mac OS PATHを使ってcdなどで簡単に移動できるようになりたい 3 2023/05/13 14:22
- UNIX・Linux Linuxの実行結果を修正したいです。 6 2022/11/22 12:57
- UNIX・Linux AWSのEC2のZabbixユーザーでawscliコマンドが実行できない状態を解決する 1 2022/12/06 22:17
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Ruby 教えてください 2 2023/01/04 17:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
dos変数の%~dp0は powershellで...
-
C言語でファイル名を取得
-
Windowsで複数のファイルを同じ...
-
Net::FTPを使いファイル一覧の...
-
空白を含むディレクトリにある...
-
batファイルでrenameができませ...
-
ディレクトリ名を取得したい
-
readdir()で得られるファイル・...
-
ディレクトリの判別
-
エラー 'dir.h' : No such fi...
-
パスから最後のディレクトリだ...
-
エクセルVBA コードが同じでも...
-
sprintfについて
-
openした後、closeしないでプロ...
-
fgets で値が取得できない
-
VBAでCSVファイルを途中行まで...
-
VBAでCSVファイルの特定行を書...
-
Perl 内で実行される Perl が S...
-
jpgファイルの頭の部分を読みと...
-
Perlのmyとourについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
batファイルでrenameができませ...
-
Windowsで複数のファイルを同じ...
-
FindFirstFileとFindNextFileで...
-
パスから最後のディレクトリだ...
-
C言語でファイル名を取得
-
readdir()で得られるファイル・...
-
dos変数の%~dp0は powershellで...
-
vba dir の相対パス
-
シンボリックリンクを検出でき...
-
ディレクトリの判別
-
Net::FTPを使いファイル一覧の...
-
エラー 'dir.h' : No such fi...
-
LinuxのC言語で、ファイル名の...
-
makefileでファイルをコピー(...
-
Perlで フォルダ内の全て...
-
ファイル名の文字コード(?)と...
-
一定時間が経過したフォルダの削除
-
サーバーにある特定の拡張子フ...
-
Director拡張子
-
chdirがうまくできない
おすすめ情報