[Linuxの] "LinuxのCプログラミングストップ学習" パート3 [Linuxシステムのプログラミング]

ファイルI / O

  • Cの標準I / Oライブラリ関数と非バッファI / O機能
    • C標準では、I / Oライブラリ関数のprintf()、のputchar()、fputs()、I / Oは、ユーザ空間でバッファ開きます
    • ()、リード()、書き込み()、クローズ()などのC標準ライブラリの関数であり、私はまた、バッファなしI \ O(非バッファI / O)機能と呼ばれる、システムのオープン/ Oのバッファの基礎となります
    • 私は通常のファイルを読み書きする標準ライブラリを呼び出すと/ O / O高速化非バッファI、およびI / Oバッファを管理する必要性よりも
    • バッファはバッファなしI / Oの端末やネットワーク機器、通常は直接呼び出しを記述する必要はありません。
    • Linuxカーネル内の各プロセスは、プロセスに関連する情報を維持するためにtask_struct構造、呼び出したプロセスの記述(プロセス記述子を)
    • 知られているtask_struct files_struct構造体へのポインタがあるファイル記述テーブルの各エントリは、オープン・ファイル・ポインタへのポインタを含むことを特徴は、
    • ユーザーが直接カーネル内のファイルの記述にアクセスすることはできませんが、唯一と呼ばれるファイルディスクリプタ・テーブル・インデックス(0,1,2、など)、使用できるファイルディスクリプタ int型の変数に保存し、
    • ファイルを開くためのコールが開かれると、カーネルはファイルディスクリプタを割り当て、ユーザプログラム、新しくオープンしたファイルへのファイルディスクリプタ・テーブルのエントリポインタに戻りました
    • ファイルを読み書きする場合、ユーザプログラムに渡されたファイルディスクリプタは、読み取りまたは書き込み、カーネルはファイルディスクリプタに基づいて対応するエントリを検索し、その後で、ファイル・テーブル・エントリのポインタを検索します
    • プログラムの起動時に3つのファイルが自動的に開きます:標準入力、標準出力と標準エラー出力を
  • 開閉
    • int型オープン(のconstのchar *のパス名、int型のフラグ、...);
    • ファイルのパーミッションは、現在のプロセスのオープンとumaskのマスクのモード引数によって決まります
    • int型に近い(int型FD);
  • 読み書き
    • ブロッキング(ブロック):プロセスは機能がブロックされている呼び出すと、プロセスはスリープ(スリープ)状態に置かれているイベントを待っているプロセスが前に(パケットがネットワーク上で受信されているような)が発生するまで、カーネルスケジューラ他のプログラムをあります実行するためにそこに続けることが
    • 実行(実行):実行中または準備完了状態(実行する準備ができて)されています
    • ポーリング(アンケート):ここにアップすることになって、実際にブロックされていないが、直接エラーを返し、呼び出し側が再びそれを読むようにしてください
    • ノンブロッキング、すべてのデバイスがデータ行われていない場合はI / Oは、オペレーティングシステムが別のプロセスの実行をスケジュールすることができ閉塞あれば、有用な作業を行うために繰り返し問い合わせに、発信者のニーズに到着、欠点を持っています
    • これは、非ブロックI / Oを使用することができ、通常はwhileループでクエリを停止しませんが、遅れたスケジュール他のプロセスを待っている間に議会への遅延は、実行することができますに関するお問い合わせませんでしたが、データが到着したときに欠点がありますない時間で
    • (2)デバイスを複数の遮断を監視同時に機能することができます選択、あなたはまた、待機タイムアウトをブロック設定することができます
  • lseek
    • 現在の読み出し位置を移動(オフセット)
  • fcntlの
    • ファイルのステータス属性(ファイルステータスフラグ):現在のプロセスである何が、このような、非ブロックなどの読み取り、書き込み、追記として、ファイルまたはデバイスにアクセス
    • リセット状態プロパティは、ファイルを再オープンすることなく、ファイルを開いてきました
    • シェルリダイレクト構文:でファイルディスクリプタ上のファイルを開いて、<、>、>>、<>デジタルフロントを追加するには、番号を表しています
    • $コマンド>を/ dev / null 2>&1:標準出力のリダイレクトコマンドコマンドは/ dev / nullに、エラーメッセージ(標準誤差)コマンドは、標準出力(&1を生成してリダイレクトされてもよい、ではありません&に加え、それがファイル名として解釈される)同じ文書の、即ち、を/ dev / null
    • / dev / nullファイルデータに表示されていない書かれた、コマンドを実行し、それは正常ですか、エラーメッセージを出力しません
  • ioctl
    • このようなボーレート、端末ウィンドウのサイズ等の制御情報、ファイルまたはデバイス自体を送信する属性
    • データの読み出し/書き込み読み出し及び書き込み、インバンド・データとして知られているメインI / O操作であるデータを読み取ることができないリード/ライト、ライト、アウトオブバンドデータと呼びます
  • mmap
    • ディスク・ファイルの部分を直接メモリにマッピングされ、読み取り及び書き込みポインタは、ファイル読み出し/書き込み機能を介さずに直接使用することができます

ファイルシステム

  • 入門
    • ツリー構造をユーザに提示する方法?ユーザーの要求ファイルとディレクトリの操作を処理する方法?
    • ディスクに保存されているリニアツリー構造を達成するためにどのように?ファイルの保存形式は、どのようにシステムディスクへの最も効率的なアクセスを設計するには?
    • ディスク正味の効果上のさまざまなファイルやディレクトリの操作は何ですか?
  • EXT2ファイルシステム
    • ファイル・システム・ブロックは、最小単位(ブロック)であり、同じサイズ(ブロックグループ)のブロックのいくつかのグループに分けたext2ファイルシステム全体のパーティションは、各ブロック群については、以下の成分からなります:
      • スーパーブロック(スーパーブロック):説明過剰正ファイルシステム情報領域、例えばブロックサイズ、ファイルシステムのバージョン番号として
      • ブロックグループ記述子テーブル(GDT、グループディスクリプタテーブル):そのようなiノードテーブル、開始データブロックなどを開始する場所としてブロックグループの記述情報。全体パーティションは、グループディスクリプタの数にブロック群の対応する数に分割されています
      • ブロックビットマップ(ブロックビットマップ):空きブロックが使用されているブロック全体ブロック群を記述
      • ビットマップ、iノード(iノードビットマップ):ブロックビットマップなど、それ自体は、各ビットがあるか否かフリーiノードを表す一つのブロックを占め
      • iノードテーブル(iノードテーブル):そのようなファイルタイプ、権限、サイズ、作成/修正/アクセス時刻などの情報ストアファイルの記述、すなわち情報のls -lコマンドは、参照すること
      • データブロック:データファイルストレージ
    • 読み取りおよび書き込みディスクの最小単位は、セクタ(セクタ)と呼ばれ、典型的には512のバイト
    • アドレッシングデータブロック
    • ファイルおよびディレクトリの操作システム機能:
      • 読み取りinodeファイル:STAT(2)
      • アクセス(2)
      • chmod(2)
      • chown(2)
      • UTIME(2)
      • TRUNCATE(2)
      • リンク(2)
      • 名前の変更(2)
      • MKDIR(2)
      • RMDIR(2)
  • 仮想ファイルシステム(VFS、仮想ファイルシステム):などの読み取りと書き込みアクセス抽象化レイヤなどのファイル、ディレクトリ、の概念は概念と呼ばれるように、異なるファイル形式のさまざまな上のLinuxカーネルは、抽象化層を作るさまざまなファイル・システムそうそれらをすべて同じに見えますし、
    • Linuxファイルシステム:ネットワーク・ファイル・システム、ディスク・ファイル・システム、特殊なファイルシステムなど
    • 汎用ファイルシステムとしてVFSは、抽象的、ファイルシステム、ファイル、ディレクトリエントリ、iノードの四つの基本的な概念は、マウントポイント
    • Linuxでは、ほかにファイルされているすべてを処理します
    • VFSの4つの基本的なオブジェクト
      • オブジェクトのスーパーブロック(スーパーブロックのオブジェクト):マウントされたファイルシステム
      • iノードオブジェクト(iノードオブジェクト):ファイル
      • オブジェクトディレクトリエントリ(dentryを対象):ディレクトリ
      • Fileオブジェクト(ファイルオブジェクト):プロセスによってファイルを開きます

    • PCB(プロセス制御ブロック)内の各プロセスは、ファイルディスクリプタテーブルで保存され、ファイルディスクリプタテーブルのインデックスであり、各エントリは、カーネルのファイル構造へのポインタを有しています
    • ファイル構造のメンバー
      • f_flags:ファイル・ステータス・フラグ
      • f_pos:リーダーの現在位置
      • f_count:参照カウント(参照カウント)
    • file_operations構造への各ファイル構造の点は、構造部材は、様々なファイル操作実装カーネル関数への関数ポインタであります
    • 各ファイルは、キャッシュのdentryツリー構造に構造のdentry(ディレクトリエントリのディレクトリエントリ)ポインタ構造、カーネル・キャッシュ・ディレクトリへのポインタを有し、各ノードは、パス(例えば、/家庭によれば、のdentry構造であります/ akaedu / a)は、ファイルのinodeを見つけます
    • inode構造体は、等所有者、ファイルサイズ、タイプ、権限、などのパーティションにディスクiノード、から読み取られた情報を保持しています
    • 各inode構造体は、このような追加および削除、ファイルやディレクトリなどの一部の操作のカーネル関数の完了までの機能ファイルディレクトリポインタのセットですinode_operations構造体へのポインタを持っており、他のシンボリックリンクを辿ります
    • iノードは、文書を示す、そのような部材s_root用のdentryへのポインタである等、ファイルシステムタイプ、ブロックサイズ、等のパーティションを読み取るためにディスクからスーパーブロックに関する情報を保持する構造super_block構造体へのポインタを有していますシステムのルートはどこマウントすることです
    • DUPとdup2のは、2つのファイル記述子が同じファイル構造を指すように、既存のファイルディスクリプタをコピーするために使用することができます
    • ハードリンク(ハードリンク):ファイル名の複数に対応するiノード番号、すなわち文書のエイリアスを複数用いて
    • ソフトリンク(ソフトリンク):ファイル名にiノード番号の対応を、簡易ファイル

プロセス

  • 入門
    • カーネル内の各プロセスは、プロセスに関連する情報を維持するために、プロセス制御ブロック(PCB)を有し、Linuxは、以下の情報を含むPCBのtask_struct構造であります
      • プロセスID:負でない整数、各プロセスは固有のIDを有するシステム
      • プロセスの状態:実行、一時停止、停止、ゾンビなど
      • いくつかのCPUレジスタの切り替え処理保存および復元する必要があります
      • 仮想アドレス空間を記述する情報
      • 制御端子の説明
      • 現在の作業ディレクトリ
      • umaskのマスク
      • ファイルディスクリプタ・テーブル、ファイル構造体へのポインタは、多くの身体が含まれています
      • そして、信号関連情報
      • ユーザーIDおよびグループID
      • 制御端子、セッションとプロセスグループ
      • 資源上限(リソース制限)プロセスを使用することができます
    • フォーク:既存のプロセス(親プロセスの親プロセス)のコピーによると、新しいプロセス(子プロセスの子プロセス)
    • 幹部:新しいプログラムの実施

  • 環境変数
    • PATH:実行可能ファイルの検索パスは、区切られた複数のディレクトリを含めることができます。echoコマンドの値をチェックしてください
    • SHELL:現在のシェル、通常値/ binに/ bashの
    • TERM:現在の端末タイプ
    • LANG:言語とロケールは、フォーマット情報や時間、通貨などをコードする文字を表示することを決定しました
    • HOME:ユーザのホームディレクトリの現在のパス
  • プロセス制御
    • フォーク:システムコール機能、子プロセスは、親プロセスを複製するためによると、カーネルに呼び出した後。二回返され、一度呼び出さ(親、親プロセスは一度と呼ばれ、子が処理し、各一回戻っ)
    • GDBは(デフォルトでは親プロセスである)プロセスを追跡することができますが、同時に複数のプロセスを追跡することはできません
    • 幹部:あなたはフォークを使って子プロセスを作成した後、子プロセスは別のプログラムを実行するには、execニーズを呼び出します
    • 待ってwaitpidの:プロセスは、シェル(親)の呼び出しが待つか、完全にこのプロセスを削除しながら、その終了ステータスを取得するにはwaitpidの終了が、親が待機を呼び出すか、しない場合は処理を終了するには、状態のプロセスである、それをきれいにするwaitpidのさゾンビプロセス
  • プロセス間通信
    • 別のユーザーのアドレス空間とのそれぞれが、他のプロセスのグローバル変数を見ることができない各プロセスは、プロセス間のデータは、カーネルを介して交換されなければなりません
    • カーネル内のオープンバッファ、バッファにユーザ空間からデータをコピーし、離れたデータを読み出すためのバッファカーネルから2を処理するためのプロセスは、このメカニズムは、プロセス間通信(IPC、プロセス間通信)と呼ばれています
    • パイプラインは、次のような制限パイプ機能によって作成された基本的なIPCメカニズムであり、
      • 親が読むことを書いた子プロセスであれば、通信処理のみを、パイプラインを介して達成することができる双方向、あなたは別のパイプをオープンする必要があります
      • オープンファイルディスクリプタを通過するパイプの読み取り終了、フォークを通過するファイルディスクリプタ
    • 特別な事情パイプラインの4種類
      • パイプファイルディスクリプタの書き込み終了までのすべてのポイントが閉じられています
      • そこには閉じていない、パイプファイルディスクリプタの書き込み側を指しています
      • パイプファイルディスクリプタの読み込み終了までのすべてのポイントが閉じられています
      • パイプの読み出し側をポイントするファイルディスクリプタをオフにしません。
    • その他のIPCメカニズム:FIFO、UNIXドメインのソケット(最も広く使用されている)、IPCチャネルを識別するために、特別なファイル内のファイルシステムを使用して

シェルスクリプト

  • どのように実行するように
    • 、ユーザコマンド入力いずれかを解釈インタラクティブ(対話型)の実装の、方法を解釈し、バッチ(バッチ)二つに(シェルスクリプトを記述する前にユーザ(スクリプト)、シェルが最初性能を完了しました)
    • ユーザーは、コマンドラインでコマンドを入力して、シェルはforkして、コマンドをexecしますが、組み込みコマンドの例外、組み込みコマンドは、新しいプロセスを作成していない機能シェルプロセスを呼び出すことに相当し、実行します  
  • 基本的な構文
    • 変数:大文字は、サブの環境変数とローカル変数で構成される下線(シェルは、現在のプロセスに存在します)
    • ファイル名置換(globbingと):マッチングのためと呼ばれるワイルドカード文字(ワイルドカード)
    • コマンド置換: ``または$()はコマンドです
    • 算術置換:整数の変数にシェル値の$(())
    • エスケープ文字:直後の単一の文字を除去するための特別な意味\
    • 単一引用符、二重引用符:リテラル引用符内のすべての文字を保管してください
  • bashの起動スクリプト
    • あなたは、環境変数とエイリアスを設定する起動スクリプトでumaskの設定、あなたはシェルを起動するたびに効果を取ることができます
    • bashのスタートアップモード
      • シェルは対話的なログインとして開始、またはパラメータ開始--loginを使用します
      • インタラクティブ非ログインSHEL開始
      • 非対話開始
      • スタートへのShコマンド
    • シェルスクリプトの構文
      • 試験条件:試験又は[
      • if / then /のelif /他/ FI
      • ケース/ ESAC
      • /を行うために/行って
      • / /行わない一方、
      • 位置パラメータや特殊変数
      • 機能
    • シェルスクリプトのデバッグモード
      • -n
      • -v
      • -バツ

正規表現

  • 入門
    • 正規表現:いくつかの特別な条項構文記法の文字クラス、および修飾子の数との位置関係、及び、これらの特殊な構文を使用して文字列が一緒にコモンモードを表す(パターン)
    • メッセージが含まれています。文字クラス(文字クラス)、修飾子の数(数量詞)、文字間の位置関係を
    • アプリケーション:検証のユーザー入力(IP、電子メール)フォーマットは合法です
  • 基本的な構文
  • 共通コマンド
    • グレップ
    • sedの:ストリームエディタ(ストリームエディタ)は、シェルスクリプトをフィルタとして用い、入力前に導入されたプログラムの出力は、他の出力形式に変換した後に編集、セッド  
    • AWK:行または処理ユニットとして

信号

  • 基本コンセプト
    • Ctrl-Cを押し信号が割り込みを処理する、発行されたフォアグラウンド処理(ハードウェア割り込み)によって生成されたユーザーモードからカーネルモードへの切り替えにCPUれます
    • プロセスの制御フローに対する信号は、非同期であります
    • システム定義の信号のリストを表示する-lを殺し、各信号は、ラベルおよびマクロ名を持ち、マクロ定義はsignal.hに中に見出すことができます
    • 各信号は、既定の条件及び生成処理動作を有しています
  • 信号を生成します
  • 信号をブロック
    • 送達の信号処理動作を実行する信号(配信)と呼ばれます
    • 信号は、保留中のシグナル伝達(保留)と呼ばれる状態との間で発生します
    • プロセスがブロック解除されるまでそれがアクションの送達の実装前に、ブロックされたときに保留状態信号に保持された信号ブロック(ブロック)を選択するためのプロセスが生成されます
  • キャプチャ信号
    • 信号処理動作は、ユーザ定義関数(シグナルハンドラ)、ハンドオーバ、自動的にシステム再度カーネルモード復帰に実行sigreturnコールは、新しい信号が配信されなかった関数呼び出しの信号であり、メインリターンコンテキストを続行します

ターミナル、およびジョブ制御デーモン

  • ターミナル
    • シリアル端末:組み込み開発、ターゲット端子板に対応する各ポート
    • 仮想端末(仮想端末): /dev/tty1/dev/tty6
    • ターミナルバッファ:入力端子/出力バッファキュー
    • ターミナルログイン:カーネルモジュールは、端末デバイスドライバとライン・プロトコルを処理するハードウェアを含む(ライン規律)
    • ネットワーク端末/端末グラフィック(ウィンドウ):疑似端末(擬似TTY)によって達成任意の数、マスター疑似ターミナル(キーボードおよびディスプレイに対応するPTYマスター)とデバイス(PTYスレーブ)から組成物からなるデバイス

  • ジョブ制御(ジョブ制御):
    • ジョブ(仕事を)プロセスグループ(プロセスグループ)を意味し、シェルは、同時に複数の背景と前景ジョブジョブを実行することができます
    • セッション:プロセスのグループの同じ制御端末を持っています

  • デーモン(デーモン)
    • Linuxでのシステムサービスプロセスは、何の制御端子はありません、そしてユーザーがいない相互作用ユーザーログオンに影響を与えて実行され、ログオフせずにすることができます

スレッド

  • スレッドの概念
    • 同時に複数のネットワークホストからの毛で複数のファイル、待機との契約をダウンロードしながら、プロセス制御で、ユーザのマウスとキーボードのイベント処理を待って、側にソフトウェア、グラフィカルなインターフェイス、およびユーザーとの対話をダウンロードするなど、複数のプロセスを、実行しながら、データへ
    • マルチタスク「待ち - 処理」サイクル缶マルチスレッド
    • 同じプロセスの複数のスレッドが同じアドレス空間を共有します
  • コントロールスレッド
    • スレッドを作成します。
    • スレッドを終了
  • スレッド間の同期
    • ミューテックス(mutexの、相互排他ロック):利用可能なリソースの数を表していない、0または1が、ロックを取得するためのスレッドが行うことができ、「読み取り - 書き込み - モディファイ」のみなしロックスレッド、ロック操作をした後、他のスレッドを解放します中間中断を行わず、これは他のプロセッサ上で並列されず、アトミック操作である(実行行うかのいずれか)「書き込み - - リードモディファイ」ことを確認し、共有データにアクセスするために待つことができませんオペレーティング
    • デッドロック(デッドロック)
    • 条件変数(条件変数)
    • セマフォ(セマフォ):利用可能なリソースの数は、1より大きくてもよいです
    • 他のスレッド間の同期メカニズム

TCP / IPプロトコルの基礎

  • TCP / IPプロトコルスタックパケットのカプセル化
    • パケット名:輸送層 - セクション(セグメント)、ネットワーク層 - データパケット(データグラム)、リンク層 - フレーム(フレーム)

 

 

 

  • イーサネットフレームフォーマット
  • ARPデータグラムのフォーマット
  • IPデータグラムのフォーマット
  • IPアドレスとルーティング
    • プライベートIPアドレスは、プロキシサーバやNAT(ネットワークアドレス変換)を介してインターネットへのリンクをホストすることができます
    • ネイティブのループバックテスト(ループバック)

 

 

    • ルーティングテーブル 
  •  UDPセグメントのフォーマット
  • TCPプロトコル

ソケットプログラミング

  •  予備
  • TCPプロトコルベースのネットワークプログラム
    • 選択:ネットワーク・プログラム・コールが同時に遮断することができるシステムは、同時マルチプロセスサーバのサービスを実現することができ、フォークせず、従って、最初の治療上のデータを有し、(そのような複数のネットワーク接続のような)複数のファイル記述子を監視
  • UDPベースのネットワークプロトコルプログラム
  • UNIXドメインソケットIPC
  • 簡単なWebサーバー

参照

LinuxのCプログラミングストップ学習

http://docs.linuxtone.org/ebooks/C&CPP/c/

IBMのチュートリアル

https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html

ソフトとハード有線接続

https://blog.csdn.net/Y_Hanxiao/article/details/83986797

https://www.cnblogs.com/diantong/p/10507132.html

おすすめ

転載: www.cnblogs.com/cxc1357/p/12378555.html