none
Cライブラリ関数に必要なヘッダファイルとプロトタイプ宣言の調べ方 RRS feed

  • 質問

  • 旧式のC言語ライブラリ関数で、例えば次のような関数を使用するために必要な

    ・ヘッダファイルの宣言

    ・関数プロトタイプ宣言

    を調べるにはどうすれば良いでしょうか?

    ファイルアクセス系: open(),close(),read(),write()等

    文字列操作系: strlen(),strncpy(),strcat(),strncat()等

    プログラム実行制御系:exit()等

    一時しのぎの暫定策として、現在は次のヘッダファイルを宣言しています。

    #include <string.h>
    #include <fcntl.h> 
    #include <io.h>  // for open()
    #include <stdlib.h> // for exit()

    ・・・しかし、これらの関数名は、VC++EEのHELP上では、検索にかからないので、

    止む無くBorlandC++旧版のHELPで調べて、こうしたそれらしきヘッダファイル名

    をあてずっっぽに書いています。

    しかし、あてずっぽで、かつ、プロトタイプ宣言までは不明であるため、プロトタイプ宣言無しで

    コンパイルするとこれらの関数はwarning付で表示されています。

    例えば、

    open()関数を使用したいと思った時に、

    #include <fcntl.h>

    #include <io.h>

    int open(const char *path, int access [, unsigned mode]);

    このような、open()関数を使う為に必要なヘッダファイルとプロトタイプ宣言を調べるには

    どうやって調べれば良いでしょうか?

    また、open()関数に関しては、SUN OS, MS-DOS, VC++EE等のOS環境の違いによって、

    O_BINARY, O_RDWR, S_IWIRITE等のラベルの定義が微妙に異なっております。

    こうした使えるラベルの定義についてVC++EE用の定義を知るには、何を調べれば良いでしょうか?

     

    2006年12月8日 8:59

回答

すべての返信

  • 青柳です。

    Express Edition についてる MSDN Library がどんなものか知らないんですが。。。
    (MSDN も Express なんでしたっけ?)

    http://msdn2.microsoft.com/ja-jp/library/634ca0c2(VS.80).aspx
    こちらにリファレンスがありますよ。

    あと、MSDN Library は無料ダウンロードできるようになったんじゃなかったかと思います。

    2006年12月8日 10:13
  •  Shinichi Aoyagi さんからの引用

    青柳です。

    Express Edition についてる MSDN Library がどんなものか知らないんですが。。。
    (MSDN も Express なんでしたっけ?)

    http://msdn2.microsoft.com/ja-jp/library/634ca0c2(VS.80).aspx
    こちらにリファレンスがありますよ。

    あと、MSDN Library は無料ダウンロードできるようになったんじゃなかったかと思います。

    ご教示ありがとうございます。オンラインで読めるようになっていたのですね。大変助かります。

    今日は、open(filename,O_RDONLY)で開いてread(int in, char *buf,BUF_LEN)という感じで読んでいましたら、文字配列buf_len[ ]の読まれたデータを見ますと、CR,LFが変な順番で読み込まれる現象に気が付きました。

    例えば,

    あいうえおCRLFかきくけこCRLF

    というテキストファイルを読むと、1行目のCRが無くなりLFだけになり,それが次の行末にくっつくような感じです。もしかしたらと思い、open(filename,O_RDONLY| O_BINARY)としたら正常になりました。

    ご紹介のオンライン文書を読むと、VC++2005EEでは、

    ・open()を使ってはだめ。

    ・_open()を使うこと。

    と書かれており、そうだったのか・・・orz と思いました。

    追記:K.Okamotoさんの著作 Nov. 18, 1998のBASE64エンコード、デコードプログラムに次の改良を

    加えたサンプルコード(Win32コンソールプロジェクト用)をおまけとしてに載せておきます。

    入力データ先頭にSHIFT-JISコードが来るとBASE64デコード時に無限ループになるものを修正。

    http://homebrew2004.hp.infoseek.co.jp/Test-Base64-V2.cpp.txt

     

    2006年12月8日 11:59