Linuxでは、あなたは基本的なプログラミング(IV)を知っておく必要があります

  1. GDBデバッガ
    GDB(GNUデバッガ)は、デバッグツールをGCCです。次のような機能は以下のとおりです。

     1. 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序
     2. 可让被调试的程序在你所指定的调试的断点出停住。(断点可以是条件表达式)
     3. 当程序被停住的时候,可以检查此时你的程序中所发生的事
     4. 动态的改变你程序的运行环境
    
    1. GCCのコンパイル時間のGDBファイルは、パラメータ-gを追加するときに生成さ調整可能
    2. 開始GDB
      1.のみステップ実行
      (NEXT)2 N ----次のステップ
      本体の内部機能に---- 3 S(ステップ)を
      4℃(継続)----直接駐車ブレークポイントで
    3. 参照してくださいコード
      1. L(一覧)
      2. L +行番号
      3リットル+ファイル名+:+関数名
      4リットル+ファイル名+:+行番号
    4. ブレークポイントを設定
      1. 現在のファイルのブレークポイントを設定します。
        1. ブレーク+行番号(BREAKは、Bと略記することができます)
        2. ブレーク+関数名
      2. ブレークポイント指定されたファイルを設定します。
        1. 休憩+ファイル名+行番号
        2. 休憩+ファイル名+関数名
      3. 設定条件付きブレークポイント
        B +行番号+条件(IF I == 15)
      4. 削除ブレークポイント
        番号に対応するデル+ブレークポイント
    5. ブレークポイント設定を参照してください
      情報+休憩を(略称:I b)は
    6. 開始GDBデバッグ(スタート)
      1. ステップ動作を実行します
      2. N(次)----次のステップ
      3. S(ステップ)----関数缶本体内部へ
      4. C(継続)----は直接ブレークポイントで停止します
    7. ステッピング
      1. 関数を入力すること。■
      2. 機能裏返しから:仕上げ(前提はブレークポイント機能本体を削除することです)
      3. U:現在のサイクルを終了します
    8. 変数の現在の値が表示し
      たp(プリント)+変数名を
    9. 変数の型を確認してください
      p型+変数名を
    10. 変数の値を設定し
      、設定されたVAR +変数名+「=」+値(回避の待機を)
    11. 追跡変数を設定します。
      1. ディスプレイ+変数名
      2. 情報+ディスプレイ(表示トレース変数)
      3. 変数のundislay +追跡番号
    12. GDBデバッガを終了します
      終了
  2. メイクファイルを書きます

    1. makeコマンドは、あなたがコマンドをコンパイルする必要があるとプログラムをリンクするものメイクを伝えるためにメイクファイルを必要とするとき。
      メイクファイルは、これらの文書をコンパイルしてリンクする方法をmakeコマンドを伝え、ルールは次のとおりです。

      1. このプロジェクトがコンパイルされていない場合は、すべてのCファイルには、コンパイルとリンクする必要があります
      2. この作品は、その後、我々は唯一のCコンパイラを変更し、ターゲットプログラムとのリンク場合は、いくつかのCファイルが変更されています
      3. プロジェクトのヘッダファイルが変更された場合、我々はいくつかのヘッダファイルとリンク先のプログラムを参照されたCファイルを構築する必要があります
      4. 長い良いを書くためにメイクファイルとして、すべてこれが唯一のmakeコマンドで行うことができるように、makeコマンドは、自動的に必要な書類をコンパイルするので、現在のファイルの変更に基づいて再コンパイルする必要があるファイルを特定することができますし、リンク先のプログラム
    2. makefile的命名
      MakeFile 或者 makefile

    3. メイクファイルルール(メイクファイルのコアコンテンツ)

       1. Target…:prerequisites…
       		Command
       		…
       		…
       2. target也就是一个目标文件,可以是object File,也可以是执行文件,还可以是一个标签(Label)
       prerequisites就是,要生成那个target所需要的文件或是目标
       command就是make需要执行的命令。(任意的Shell命令)
       3. 这是一个文件的依赖关系,target这一个或多个的目标文件依赖于prerequisittes中的文件,其生成规则定义在command中。说白一点,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。
       4. 在定义好依赖关系以后,后续的那一行定义了如何生成目标文件的操作系统命令,一定要以一个Tab键作为开头。make并不管命令是如何工作的,他只管执行所定义的命令。make会比较targets文件和prerequisites文件的修改日期,如果prerequisites文件的日期要比targets文件的日期要新,或者target不存在的话,那么make就会执行后面的命令
      
    4. 一例
      。1)試験ディレクトリ:
      ここに画像を挿入説明
      メイクファイルの2)含有量:
      ここに画像を挿入説明
      3)テスト・ディレクトリ・コマンドのコマンドは、コマンドを実行し、実行可能なメインを生成して入力を行う
      4)のコマンドを入力します。./メイン
      ここに画像を挿入説明

    5. メイクの仕事
      私たちはメイクを入力し、あるデフォルトモードでは、次の手順を実行します。

      1. カレントディレクトリに名前「のMakefile」や「メイクファイル」ファイルを見つけmake'll
      2. 見つかった場合、彼は最初のターゲットファイル(ターゲット)内のファイル、およびファイルなど、この文書の最終的な目標を見つけるだろう
      3. 対象のファイルが存在しない、またはオブジェクトファイルは、新しいよりの.oファイルのオブジェクトファイルを依存している場合、その後、彼は後にオブジェクトファイルを生成するために定義されたコマンドを実行します修正
      4. それでは見つかった場合、.oファイルに依存している.oファイルは、makeが現在のファイルのターゲットファイルを探します、存在する対象のファイル場合はの.oファイルを生成します(スタックのプロセスに似ています)規則に従っています
        ここに画像を挿入説明
      5. CファイルとHファイルは、makeは.oファイルを生成して、存在し、その後、目的のファイルがある世代のタスクは、究極を作る.oファイルを、使用します
    6. メイクファイルの変数を使用します

      1. 通常の変数
        1. メイクファイルが複雑になる場合、簡単な文字列である私たちは、変数を使用することができますメイク、メイクファイル変数の順序のMakefileに維持するために、
          ここに画像を挿入説明
        2. 変数の数によってメンテナンスフォーマットは通常、大文字でのmakefile。
          1. いくつかの変数はデフォルト値(デフォルト値は、cc ccの== GCC CC)を持っています
          2. いくつかの変数デフォルトなし
            1. CPPFLAGS:生前オプションなど:-I
            2. CFLAGS:コンパイル時-cパラメータ-Wall -gを使用して
            3. LDFLAGS:-lで使用されるオプション-Lリンクライブラリ
        3. また、ユーザは、これらの変数の値を変更することができます(CC = gccの)
      2. 自動変数
        1. 変数:
          A)$ @ - >>ターゲット・ルール・
          B)$ < - >>最初のルールの依存関係
          C)$ ^ -すべての依存ファイル>>ルール
        2. モードルール:
          A)で定義された規則用い%対象
          %でB)は、ルールの依存に使用
          ここに画像を挿入説明
    7. 自動派生させる
      GNUのmakeが、彼はコマンドファイルと後ろの依存関係を自動的に得ることができ、非常に強力ですが、彼らは.oのファイルを参照してください、彼は依存関係に.Cファイルを追加することになり、後に推定されるだろう抜けます
      ここに画像を挿入説明

    8. :内部のメイクファイル内容
      の表示ルール、あいまいなルール、変数の定義、命令やファイルのコメント:5つの主要なものが含まれているメイクファイル

      1. ルールを表示:表示ルールは、1つ以上のオブジェクト・ファイルを生成する方法について説明します。これは明らかにメイクファイルライターで示され、それがコマンドを生成、ファイルを生成することに依存しています
      2. 無名のルール:私たちは自動導出関数を作るので、とても曖昧なルールはのメイクでサポートされてラフな書き込みメイクファイル、に私たちを可能に
      3. 変数の定義:変数は、対応する基準位置まで延長されている我々は、メイクファイルが実行されたとき、一般的にストリングの変数のセットを定義する必要がメイクファイルで
      4. ファイルを示し:三つの部分を:
        1. 別のは、メイクファイルメイクファイル(C言語が含まれるような)が挙げ
        2. いくつかの場合において、活性部分は、(プリコンパイルの#ifとしてC言語等)のmakefileに応じて指定します
        3. 複数行のコマンドの定義
      5. 注:のみ、メイクファイル行コメント、そのコメントは「#」文字で、あなたのような、バックスラッシュでエスケープするために「#」文字を使用する場合:「/#」
        メイクファイルでコマンド、我々はタブキーで開始する必要があります
    9. メイクファイルの二つの機能
      各関数に戻り値があるのmakefile

      1. 取得し、指定したディレクトリの.cファイルの
        SRC = $(ワイルドカード./ .C)
        機能、ワイルドカードと呼ばれる
        ディレクトリ./
        が.c(ディレクトリ内のすべての現在の.cファイル)
        返された値取得の値のための$を
      2. またファイルに.C .oファイルを
        OBJ = $(patsubst ./%.c、./%.o 、$(SRC))
        patsubstと呼ばれる機能
        ./%.cファイルCさ
        ./%.oはOファイル
        $(SRC)の.cファイル内に保存されました
        ここに画像を挿入説明
    10. 削除* .oファイルとオブジェクトファイル(一時ファイルクリア中央)(ターミナルでコマンドを入力します。きれいなメイクファイルでのrm $(OBJ)$(ターゲット実行されます作る )-f)を
      ここに画像を挿入説明
      -fパラメータの役割:必須です前のコマンドの実装

    11. Pseudotarget

      1. その理由
        は、現在の文書にクリーンなファイルを作成する場合クリーンメイクcleanコマンドの実装では、擬似的な目標としてとてもきれい現在のディレクトリ内のファイルを、生成されませんコマンドmakeが要求されます「『クリーン』は最新のものです 」 、実行されません"のrm $(OBJ)$( -fターゲット)" このコマンド
      2. ソリューション:
        以前に宣言クリーン、クリーンな擬似ターゲットで
        ここに画像を挿入説明
  3. システムのIO機能
    ファイル+ファイル名:ファイルを表示する形式

    1. IO Cライブラリ関数のワークフロー
      ここに画像を挿入説明

    2. PCBとファイルディスクリプタ
      ここに画像を挿入説明

    3. 仮想アドレス空間
      ここに画像を挿入説明

    4. CPUは、仮想アドレス空間と物理アドレス空間マッピングを使用するには、なぜ?何が問題を解決しましたか?

      1. 便利なコンパイラやオペレーティングシステムスケジューラアドレス配布。
        プログラムは、大規模なメモリバッファにアクセス非連続物理メモリに隣接する仮想アドレスのシリーズを使用することができます
      2. 簡単なプロセス間の分離
        互いから分離して使用される仮想アドレスの異なるプロセス、プロセスが別のプロセスによって使用されている物理メモリ内のコードを変更することはできません
      3. 簡単には、オペレーティングシステムのメモリを使用するには
        、使用可能な物理メモリよりも大きなバッファメモリにアクセスするために、仮想アドレスのシリーズを使用することができます。物理メモリの供給が小さくなると、メモリマネージャは、物理メモリページになります(通常サイズは4キロバイトである)ディスクファイルに保存
    5. ライブラリ関数とシステム機能との関係
      ここに画像を挿入説明
      F。(オープン、読み取り、書き込み、のlseek関数クローズ)

       查man文档(man 2 + 函数名称)
       	errno:
       		1) 是一个全局变量(任何标准C库函数都能对其进行修改(Linux系统函数更可以))
       		2) 错误信息定义的位置:
       			a) 第1-34个错误定义:
       			/usr/include/asm-gengric/errno-base.h
       			b) 地35-133个错误定义:
       			/usr/include/asm-generic/errno.h
       		3) 是记录系统的最后一次错误代码,代码是一个int型的值
       			a) 每个errno值对应着以字符串表示的错误类型
       			b) 当调用“某些”函数出错时,该函数会重新设置errno的值
       		4) perror
       			a) 头文件:stdio.h
       			b) 函数定义:void perror(const char * s)
       			c) 函数说明:
       				i) 用来将上一个函数发生错误的原因输出到标准设备(stderr)
       				ii) 参数s所指的字符串会先打印出,后面在加上错误原因字符串
       				iii) 此错误原因依照全局变量errno的值来决定要输出的字符串
       	1. open
       		1) 头文件:
       			a) #include<sys/types.h>
       			b) #include<sys/stat.h>
       			c) #include<fcntl.h>
       		2) 函数定义
       			a) int open(const char * pathname,int flags);
       			b) int open(const char * pathname,int flags,mode_t mode)
       		3) 函数说明(用来打开一个存在或者打开一个不存在的文件)
       		4) 参数说明:
       			a) pathname:打开文件的路径(绝对路径或者是相对路径)
       			b) flags:文件的打开方式
       				i) the argument flags must include one of the following access modes:O_RDONLY,O_WRONLY,or O_RDRW.This request opening the file read-only,write-only,or read/write, respectively
       				ii) in addition,zero or more file creation flags and file status flags can be bitwise-or'd in flags. The file creation flags are O_CLOEXEC,O_CREAT,O_DIRECTORY,O_EXCL,O_NOCTTY,O_NOFOLLOW,O_TEPFILE, and O_TRUNC. The file status flags are all of the remaining flags listed below. The distinction between these two groups id flags is that the file status flags can be retricved and (in some cases) modified.
       			c) mode:指文件创建后的权限
       				注意:文件的实际权限 = 创建文件是给定的权限 & 本地掩码取反
       				查看掩码umask
       				修改掩码umask + 三位的八进制数
       		5) 函数返回值:
       			open() return the new file descriptor, or -1 if an error occurred (in which case,errno is set appropriately).
       	2. read
       		1) 头文件:
       			a) #include<unistd.h>
       		2) 函数定义
       			a) ssize_t read(int fd,void *buf,size_t count)
       				i) size_t是无符号的整数
       				ii) ssize_t是有符号的整数
       		3) 函数说明
       			a) read() attempts to read up to count bytes from file descriptor fd into the buffer starting at buf
       		4) 参数说明
       			a) fd:文件描述符
       			b) buf:缓冲区
       			c) count:缓冲区的大小
       		5) 函数返回值
       			a) on success, the number of bytes read is returned (zero indicates end of file), and the file position is advanced by this number. It is not an error if this number is smaller than number of bytes requested; this may happen for example because fewer bytes are actually available right now (maybe because we were close to end-of-file, or because we are reading from a pipe, or from a terminal), or because read() was interrupted by a signal
       			b) on error, -1 is returned, and errno is set appropriately. In this case, it is left unspecified whether the file position (if any) changes
       	3. write
       		1) 头文件:
       			a) #include<unistd.h>
       		2) 函数定义:
       			a) Ssize_t write(int fd, const void * buf, size_t count)
       				i) Size_t是无符号的整数
       				ii) Ssize_t是有符号的整数
       		3) 函数说明:
       			a) write() writes up to count bytes from the buffer pointed buf to the file referred to by the file descriptor fd
       		4) 参数说明:
       			a) fd:文件描述符
       			b) buf:缓冲区
       			c) count:写的位置
       		5) 函数返回值:
       			a) on success, the number of bytes written is returned (zero indicates nothing was written). It is not an error if this number is smaller than the number of bytes requested; this may happen for example because the disk device was filled.
       			b) on error, -1 is returned,and errno is set appropriately
       	4. lseek(获取文件大小、移动文件指针、文件拓展)
       		1) 头文件:
       			a) #include<sys/types.h>
       			b) #include<unistd.h>
       		2) 函数定义:
       			a) off_t lseek(int fd,off_t offset,int whence)
       		3) 函数说明:以指定的位置打开文件
       		4) 参数说明:
       			a) fd:文件描述符
       			b) offset:文件偏移量
       			c) whence:
       				i) SEEK_SET(the offset is set to offset bytes)
       				ii) SEEK_CUR(the offset is set to its current location plus bytes)
       				iii) SEEK_END(the offset is set to the size of the file plus offset byte)
       		5) 函数返回值:
       			a) upon successful completion,lseek() returns the resulting offset location as measured in bytes from the beginning of the file.
       			b)  on error, the value (off_t) -1 is returned and errno is set to indicate the error
       	5. close
       		1) 头文件:
       			a) #include<unistd.h>
       		2) 函数定义
       			a) int close(int fd);
       		3) 函数说明:关闭一个已经打开的文件
       		4) 参数说明:
       			a) fd:文件描述符
       		5) 函数返回值:
       			close() returns zero on success. On error, -1 is returned, and errno is set appropriately
       		6) 错误类型:
       			a) EBADF: fd isn't a valid open file descriptor
       			b) EINTR: The close() call was interrupted by a signal
       			c) EIO:An I/O error occurred
      

以下は、マイクロチャネルパブリック番号、歓迎の注目の作者は、更新C ++、パイソン、tensorflow、機械学習、深い学習、コンピュータビジョンや他の記事を続けるで、公共の番号は確かにあなたが必要とする、300+このPDFの電子書籍が含まれています一つは、あなたが世間の注目番ああを受け取ることができます。
ここに画像を挿入説明
あなたは、JAVAの側面に興味を持っている場合は、以下のJAVAERS公共の数に焦点を当てることができ、あなたが一緒に学ぶ同行、一緒に詩や遠方のJAVAの道路を共有し、一緒に成長。これでは、公共の数字は、この世界のJAVAの友人です、国民は乾燥した表面で、毎日数-技術記事を持っているだけでなく、そのような春の戦闘、SpringBoot実用的な、高性能のMySQL、JVMの深い理解、RabbitMQの戦闘など電子書籍の先進的なアーキテクチャになります、Redisのデザインと高品質の本の数の実装など、あなたがああいいえ世間の注目を受け取ることができます。
ここに画像を挿入説明

公開された43元の記事 ウォンの賞賛129 ・は 10000 +を見て

おすすめ

転載: blog.csdn.net/Xiao_Jie123/article/details/105252336
おすすめ