---- Linuxシステムでは、あなたと共有今日はその前に、私たちは、Linux環境でのいくつかの基本的なスキルを持っている必要があり、基本的な操作のいくつかの実現にファイルを読み書きします。たとえば、マニュアルを確認して同等である特定の使用、のコマンドや関数を表示するために、manページがありますLinuxのに非常に有用である:
男booksetの
ここでクエリとして表さ男1 + 1コマンドLinuxコマンドされる
男2 2は、ここでXXXを表現クエリAPIは、Linuxで
クエリがCライブラリ関数として表現された男のXXX 3 3
我々が言ったタイトルの動作を実現するために開始することができ、このの理解を。
まず、Linux環境の一般的なファイルインタフェース機能に:オープン、クローズ、読み取り、書き込み 、のlseekを。
第二に、基本的なファイル操作はステップに分割されている:
Aは、Linuxシステムは、最終的に、ファイルの読み取りおよび操作(または他の操作)を書き込むスキャン文書の記述を取得するために、ファイルを開くために、ファイル内の常開の動作としますファイルを閉じます。
その後、B、ファイル操作、ファイルを開くようにしてください、そして、ファイル操作を実行する(開いているファイルが失敗し、それが動作することはできません)、最後のファイル操作が完了した後、ファイルを閉じてください、それ以外の場合は、ファイルの破損の原因となります
Cを、ファイルは通常、ブロックデバイスファイルシステムに格納され、我々は、操作を行うために、我々はファイルを開くために行ったとき、このファイルは静的ファイルと呼ばれるLinuxカーネルを置く含ま:カーネルは、プロセス内のデータ構造開いているファイルを確立、
我々はこのファイルを開いて次のレコードは、メモリ内のいくつかのカーネルメモリを適用し、静的ファイルの内容は、(動的ファイルと呼ばれる)、ストレージ管理のためにメモリ内の特定のアドレスにブロックデバイスから読み込まれ
、この後、ファイルを開く、Dの後読み取り操作と書き込み、ファイル、むしろ静的ファイルよりも、ダイナミックドキュメントの記憶のためにこれです。
私たちが読んで動的にファイルに書き込む場合は、この時点では、ダイナミックメモリデバイスファイルとブロックシンクは、静的な文書ではありません、
我々は、動的ファイルを閉鎖すると、デバイス・ブロック(同期)を更新する静的ファイルの動的なのカーネルメモリの内容内のファイルを閉じます。
第三に、なぜこの操作はありますか?
それ自体が(メモリNandflash、SD、および他の機能ブロック書き込み装置)を制限ブロックライト装置では、操作自体は、非常に柔軟性のないブロックデバイスです。そして、メモリはバイトで操作することができます。そして、ランダムな操作。
第四に、どのようなファイルディスクリプタ?
1、ファイルディスクリプタは:それは実際には数の本質である、この数は、我々が開いているファイルを開いたときに、オペレーティング・システムは、その後、動的なファイルを表すために、メモリ内のデータ構造の一部を構築し、プロセス内の特定の意味を表し、デジタルファイルディスクリプタ、この図メモリなどのアプリケーションに戻り、我々は結合にこれらのデータ構造をリンクこのダイナミックなファイルを維持します。あなたは、動的ファイルをしたい場合、我々は、このアプリケーションを操作した後、単に区別するために、ファイル記述子を使用しています。簡単に言えば、それは複数のファイル(複数のファイルが開いているとき)を区別することです。
2は、現在のプロセスの範囲は、文書に記載されており、現在のプロセスのうち、ファイルディスクリプタは意味がありません。
達成するためのV.コード:
1、ファイルを開きます。
1つの#include <stdio.hの> 2の#include <SYS / types.h>に 3の#include <SYS / stat.hで定義さ> 4の#include <fcntl.h> 5の#include <unistd.h> 6 INTメイン(INT ARGC 、CHAR * ARGV []) 。7 { 8 // 手順:ファイルを開く 。9 INT FD = - 1 ; // FD Linuxでファイル記述子(FDファイル記述子である 10 法的範囲は、0であるか、または正、それは負にすることはできません) 11。 FD =開き(「A.TXT 」、O_RDWR); // O_RDWRは、ファイルの読み取りおよび書き込みを表し、これはすることができる 12 人間の使用は、そのマニュアルの指示有するとオープン関数の内部参照 13である IF( - 1 == FD)又は(FD < 0 ) 14 { 15 のprintf(" ファイルオープンエラーの\ N- " ); 16 } 17 他 18であるが 、{ 。19 のprintf(" N- \オープン成功ファイル" ); 20れる } 21です // 読み込むファイル 22 // クローズファイル 23がある (FD)閉じる; // 近いファイルがちょうど開かれた 24 の戻り 0 ; 25 }
2、ファイル操作をお読みください。
1の#include <stdio.hの> 2の#includeは<sys / types.h>に 3の#includeは<sys / stat.h> 4の#include <fcntl.h> 5の#include <unistd.h> 6 INTメイン(INT ARGC 、CHAR * ARGV []) 7 { 8 INT FD = - 1 。 9 int型 RET = - 1 。 10 チャー BUF [ 100 ] = { 0 }。 11 FD =オープン(" A.TXT " 、O_RDWR)。 12 であれば( - 1== FD) 13 { 14 のprintf(" ファイルオープン故障の\ nが" )。 15 } 16 他の 17 { 18 のprintf(" 開いているファイルは、FD =%dの、成功します。\ n " 、FD)。 19 } 20 のRET =を読み取る(FD、BUF、20)。// 20表示读取的字节 21 22 であれば(RET < - 1 ) 23 { 24 のprintf(" 失败\ nを読み出します" )。 25 } 26 他の 27 { 28 のprintf(" 正常\ N-%Dバイトを読み取る" 、RET); 29 のprintf(" ドキュメントの内容:[%S] \ N- " 、BUF); 30 } 31である (FD)を閉じる。 32 戻り 0 ; 33です }
コードのコンパイル効果:
を/ mnt / hgfsディレクトリ/日#のGCCのFILE1.Cの:Ubuntuの-仮想マシン@ルート
のUbuntu-仮想マシン@ルート:を/ mnt / hgfsディレクトリ/日の#の./a.out
ファイルのオープン時には成功し、 。FD = 3が
成功した13バイトの読み込み
でファイルの内容を:[!こんにちは、世界
]
3、ファイルを書き込みます:
1つ の#include <stdio.hの> 2 の#includeは<sys / types.h>に 3 の#includeは<sys / stat.h> 4 の#include <fcntl.h> 5 の#include <unistd.h> 6 の#include < ストリング。 H> 7 int型のmain(int型 ARGC、チャー *のARGV []) 8 { 9 INT FD = - 1 。 10 チャー BUF [ 100 ] = { 0 }。 11 チャー w_buf [ 20 ] = " 私はMCUが好き" 。 12 int型 RET = - 1 。 13fd =オープン(" A.TXT " 、O_RDWR)。 14 であれば( - 1 == FD) 15 { 16 のprintf(" 開いているファイルは、障害の\ nが" )。 17 } 18 他の 19 { 20 のprintf(" 開いているファイルは、FD =%dの、成功します。\ n " 、FD)。 21 } 22 RET = ライト(FD、w_buf、strlenを(w_buf))。 23 であれば(RET < 0 ) 24 { 25 のprintf(" 書き込み故障は、N- \ IS " ); 26である} 27 他の 28 { 29 (printfの" %D \ N-成功書かれた文字を書く" 、RETを); 30 } 31は、 RET =読む(FD、BUF、20); // 20バイトが読み取ら表す 32をIF(RET < - 1。 ) 33は、{ 34である (printfの" N- \失敗読み取り" ); 35 } 36 他の 37 { 38である のprintf(" 成功ワード読み取り%dの祭り\ nは "RET)を、 39 のprintf(" ドキュメントの内容:[%S] \ N- " 、BUF); 40 } 41である (FD)を閉じ、 42は リターン 0 ; 43れます }
結果をコンパイルします:
Ubuntuの-仮想マシン@ルート:を/ mnt / hgfsディレクトリ/日の#の./a.out
ファイルのオープンでは成功し、FD = 3
の書き込みが成功書かれた14個の文字が
成功裏に0バイトの読み込み
ファイルを内容は次のとおりです。[]
Ubuntuの-仮想マシン@ルート:を/ mnt / hgfsディレクトリ/日A.TXTのCATの#
私はUbuntuのようなmcuroot仮想マシン:@を/ mnt / hgfsディレクトリ/日#VimのFILE1.C
ここにあります欠陥ファイルが書き込まれた読み取りが読み出されていない場合、この知識は心配しないで、バックで学ぶしていきます。
VIの概要:
ドキュメントの操作は、ステップは、その動作を知っている:
1を、ファイルオープン
2を、ファイルの読み書き
3を、ファイルを閉じます