質問

になっている小さなプロジェクトCの後かなり長い時間から離れてます。これらのことは起こるなど一部のファイルを処理する。気付いた様々な文書が機能に戻る FILE * を取り扱っており、他に戻小の整数)記述子.両セット機能の提供と同じ基本サービスのいかんを問いませんので使用します。

でも私はコレクションについての知恵:を使った方が良い fopen() や友だちに open()

編集 かに記バッファvs unbufferedアクセスデバイスしていることを一つの小さなプロジェクトを書く使うファイルシステムドライバーヒューズが切れていた。そのファイルレベルのアクセスが簡単にできる装置などは、cd-romまたはSCSIドライブ)として、"ファイル"(る画像)となっています。

役に立ちましたか?

解決

「のfopenは」ポータブルおよび「オープン」されていないことである異論は偽です。

のfopenのlibcの一部であり、オープンがPOSIXシステムコールである。

それぞれがどこから来る場所としてなどの携帯型である。

のI / O(あなたはそれがかもしれ想定しなければならず、実用的な目的のために、それがされて)されたファイルをfopen'edするのlibcによってバッファ、ファイルディスクリプタのオープン( ')EDは、(彼らはよくかもしれlibcのでバッファリングされていません通常はファイルシステムにバッファリングされている - しかし、あなたは(開いていないすべてのものは)、ファイルシステム上のファイルです。

fopen'ingのポイントは何、例えば、DEV / SG0 /などのデバイスノードは、たとえば、または/ dev / tty0の...何をするつもりですか?あなたは、FILE *上のioctlをやろうとしていますか?それと幸運ます。

たぶん、あなたはO_DIRECTのようないくつかのフラグを開きたい - と意味をなさないのfopen()

他のヒント

ではオンライン版のダウンロード(故が発生した場合には、直ちに、こだわりのunix系システムとするのがいいと思います:

  • よりファミリーマートとローソunix許可のビットファイルの作成.
  • をご利用下-レベル機能などを読み取り/書き込み/受に対して、CバッファストリームI/Oます。
  • 使用ファイル記述子(fd)IOケジューリング(調査-選定など) きのコースを得るfdファイルから*を使用fileno()が充分な注意を払う必要があなミックスファイル-ベストリーム機能のfdに基づく機能する。
  • 開放特別な装置は普通のファイル)

を用いfopen/fread/fwriteのための移植性を最大限り、これらは標準C機能の機能ん上記のいない.

オープンより高いレベルでのfopen作品を.... fopenのは、あなたがCで読み出されたストリームの抽象化に類似しているストリームをファイルへのポインタを返す++

fopenのあなたはファイルのファイル記述子が開かれた...それはあなたのストリームの抽象化を提供していないと、あなたはビットの処理を担当していると、自分自身をバイト開いたリターンを...これは低レベルでありますP> オープン()ファイル記述子ではないながら、

標準入出力ストリームは、バッファリングされます。あなたが必要なものに依存します。あなたはまた、他のものを作成することができます:

INT FILENO(ファイル*ストリーム)ファイル、ファイル*のためのファイル記述子を返す*のfdopen(INT fildesが、CONSTのchar *モード)ファイル記述子からファイル*を作成します。

バッファリングされ、非バッファIOを混ぜるとき、あなたは(にfflushでそれをフラッシュしていないとき、あなたのバッファに何失うことになるので)、注意してください。

はい。あなたは、低レベルのハンドルを必要とするときます。

UNIXオペレーティング・システムでは、一般的にファイルハンドルとソケットを交換することができます。

また、低レベルはFILEポインタよりも優れABIの互換性のために作る扱います。

通常、あなたは標準ライブラリ(のfopen)を使用して優先すべきです。しかし、あなたが直接開いて使用する必要があります機会があります。

頭に浮かぶ一つの例は、256個のファイルが開いていた後にfopenに失敗作られたのSolarisの古いバージョンでバグを回避することです。彼らはerroniously intの代わりにその構造体ファイルの実装でFDフィールドのunsigned char型を使用するので、これがいました。しかし、これは非常に特殊なケースだった。

read() & write() 利用unbuffered I/O(fd:整数ファイル記述子)

fread() & fwrite() 使用バッファになっていま(ファイル* 構造体のポインタ)

バイナリデータに書き出したパイプ write() ない場合 きを読むことのできるバイナリデータ fread(), でのバイトアライメント、変数のサイズ等そのナメ-シュートを放ちます。

最低レベルのデバイスドライバーコードを使unbuffered I/Oます。

多くのアプリケーションレベルのI/O用バッファ.

の利用 ファイル*およびそれに関連する機能 OKですのでマシンによる機械的:が携帯を紛失した 他のアーキテクチャーの読み書きのバイナリデータです。fwrite()は、ファッI/Oとで信頼できない場合、たとえば 記述のための64ビットアーキテクチャとは、32bit;(WindowsとLinuxで共通)。ほとんどのOSs互換性マクロ内のコードを防止す。

低レベルのバイナリのI/O携帯性 read()write() 保証 同一のバイナリを読み込みおよび書き込み時に異なる述べた。の基本的なことは送迎つき一つのまにか 全体のバイナリのスイートルーム。

<stdio.h>  // mostly FILE*  some fd input/output parameters for compatibility
             // gives you a lot of helper functions -->
List of Functions
       Function      Description
       ───────────────────────────────────────────────────────────────────
       clearerr      check and reset stream status
       fclose        close a stream
       fdopen        stream open functions //( fd argument, returns FILE*)                      feof          check and reset stream status
       ferror        check and reset stream status
       fflush        flush a stream
       fgetc         get next character or word from input stream
       fgetpos       reposition a stream
       fgets         get a line from a stream
       fileno        get file descriptor   // (FILE* argument, returns fd) 
       fopen         stream open functions
       fprintf       formatted output conversion
       fpurge        flush a stream
       fputc         output a character or word to a stream
       fputs         output a line to a stream
       fread         binary stream input/output
       freopen       stream open functions
       fscanf        input format conversion
       fseek         reposition a stream
       fsetpos       reposition a stream
       ftell         reposition a stream
       fwrite        binary stream input/output
       getc          get next character or word from input stream
       getchar       get next character or word from input stream
       gets          get a line from a stream
       getw          get next character or word from input stream
       mktemp        make temporary filename (unique)
       perror        system error messages
       printf        formatted output conversion
       putc          output a character or word to a stream
       putchar       output a character or word to a stream
       puts          output a line to a stream
       putw          output a character or word to a stream
       remove        remove directory entry
       rewind        reposition a stream
       scanf         input format conversion
       setbuf        stream buffering operations
       setbuffer     stream buffering operations
       setlinebuf    stream buffering operations
       setvbuf       stream buffering operations
       sprintf       formatted output conversion
       sscanf        input format conversion
       strerror      system error messages
       sys_errlist   system error messages
       sys_nerr      system error messages
       tempnam       temporary file routines
       tmpfile       temporary file routines
       tmpnam        temporary file routines
       ungetc        un-get character from input stream
       vfprintf      formatted output conversion
       vfscanf       input format conversion
       vprintf       formatted output conversion
       vscanf        input format conversion
       vsprintf      formatted output conversion
       vsscanf       input format conversion

そのための基本的な使い方について私が個人的に利用しないでこれを混合わざる。

逆に、

<unistd.h>   write()
             lseek()
             close()
             pipe()
<sys/types.h>
<sys/stat.h>
<fcntl.h>  open()
           creat()
           fcntl() 
all use file descriptors.

これらをプロファイルを読み書きのバイト (推奨のための特殊機器は、fifo(配管)).

いものを使用、さらに必要なさま、ありがとうございました一貫したごとイディオムやインターフェース.ほとんどのコードベース用のモードで使用するものがある場合を除き、 実際しない理由です。の両方を設定しみくださいますようお願いいたし機能に極めて信頼性の高い 使用単位百万があります。

注-- の場合はインターフェースC I/Oその他の言語 (perl,python,java,c#,lua...) チェック 何かを開発者の方の言語 お勧めする前に書Cのコードに保存し自分のもあります。

のfopenとそのいとこはバッファリングされています。オープン、読み取り、および書き込みはバッファリングされていません。あなたのアプリケーションがか気にしない場合があります。

関数fprintfおよびscanfを使用すると、フォーマットされたテキストファイルを読み書きすることができ、より豊かなAPIを持っています。読んでバイトの基本的な配列を使用書きます。変換と書式設定が手作りされている必要があります。

ファイル・ディスクリプタとの差(FILE *)は本当に重要ではない。

ランディ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top