Linux (基本的な IO、ファイル権限、Makefile)

目次

1.マニュアル

1.1 中国化

1.2 具体的な用途

2. ファイルのアクセス許可

2.1 権限について

2.2 ファイル詳細情報問い合わせ

2.3 権限の変更

3. よく使われる関数インターフェース

3.1 オープン

3.2 読む

3.3 書き込み

3.4 閉じる

3.5 関数の使用例

4、make与Makefile

4.1 make と Makefile の違い

4.2 メイクファイルの書き込み

5. vimの簡単な操作


1.マニュアル

1.1 中国化

中国語パッケージをインストールする

sudo apt-get update
sudo apt-get install manpages-zh

1.2 具体的な用途

3 つのメソッドを使用してオープン インターフェイスの詳細をクエリする

//man -L zh_CN open
man 1 open
man 2 open
man 3 open

2. ファイルのアクセス許可

2.1 権限について

Ubuntu (およびその他の UNIX 系オペレーティング システム) では、ファイル アクセス許可を使用して、ファイルに対して誰が何を実行できるかを制御します。ファイルのアクセス許可は、アクセス許可ビットの組み合わせによる 3 桁のアクセス許可文字列のセットとして表されます。 各権限文字列は、ファイルの所有者、グループ、およびその他のユーザーの権限を表します。  Ubuntu ファイル権限の詳細な説明:

許可文字列は 9 文字で構成され、それぞれ 3 文字ずつの 3 つのグループに分けることができます。

  • グループ 1: ファイルの種類と所有者の権限
  • 2 番目のグループ: グループ権限
  • グループ 3: その他のユーザー権限

各グループの 3 文字は、読み取り (r)、書き込み (w)、および実行 (x) 権限を表します。対応する文字は、許可ビットが許可されている場合は対応する文字、許可されていない場合はマイナス記号 (-) です。

以下は許可文字列の例です。-rwxr--r--

この許可文字列は次のことを意味します。

  • ファイルの種類: 通常のファイル (マイナス記号は示す)
  • 所有者の権限: 読み取り、書き込み、実行
  • グループ権限: 読み取り
  • その他のユーザー権限: 読み取り

2.2 ファイル詳細情報問い合わせ

ll コマンドを使用すると、現在のフォルダー内のファイルに関する詳細情報を表示できます。

 または、指定したファイルを表示します

zsd@Ubuntu:~/study/linuxStudy$  ls -l test.c
-rw-rw-r-- 1 zsd zsd 0  8月 27 15:34 test.c

上記の出力では、-rw-r--r-- はファイルのアクセス許可文字列です。最初の文字 - はファイルの種類 (通常のファイル) を表し、d は隠しファイルを表し、次の 3 文字は所有者権限、次の 3 文字はグループ権限、最後の 3 文字はその他のユーザー権限を表します。

2.3 権限の変更

ファイルのアクセス許可を変更するには、chmod コマンドを使用します。たとえば、ファイル「test.c」の所有者権限を読み取り、書き込み、および実行に設定するには、次のコマンドを実行します。

chmod 700 test.c

これにより、権限文字列が -rwx------ に変更されます。これは、所有者には完全な権限があり、他のユーザーには権限がないことを意味します。

3. よく使われる関数インターフェース

3.1 オープン

open 関数は、ファイルを開くか新しいファイルを作成するために使用されるシステム コールであり、ファイルに対する後続の読み取りおよび書き込み操作のためにファイル記述子 (ファイル記述子) を返します。これは <fcntl.h> ヘッダー ファイルで宣言されており、その関数プロトタイプは次のとおりです。

#include <fcntl.h>
int open(const char *pathname, int flags, mode_t mode);

① open 関数のパラメータと機能:

  • pathname(ファイル パス): これは、開くか作成するファイルへのパスを表す文字列です。相対パスまたは絶対パスを使用できます。

  • flags (フラグ ビット) : ファイルを開く方法とオプションを指定する整数です。一般的なフラグには次のものがあります。

    • O_RDONLY: 読み取り専用に開きます。
    • O_WRONLY: 書き込み専用に公開されています。
    • O_RDWR: 読み取りと書き込みのために開きます。
    • O_CREAT: ファイルが存在しない場合は、ファイルを作成します。
    • O_TRUNC: ファイルが存在する場合は、ファイルを切り詰めます (ファイル サイズを 0 に設定します)。
    • O_APPEND: ファイルの末尾に追加します。

    これらのフラグは、特定のニーズを満たすためにビットごとの OR (|) によって組み合わせることができます。たとえば、 O_RDONLY | O_CREAT は、ファイルを読み取り専用で開き、ファイルが存在しない場合は作成することを意味します。

  • mode(ファイル権限): これは整数であり、ファイルの作成時にのみ使用されます。新しく作成されたファイルの権限 (ファイル所有者、グループ、およびその他のユーザーの読み取り、書き込み、および実行権限) を指定します。通常は 0644 のように 8 進数で表現され、所有者は読み取りと書き込みが可能で、他のユーザーは読み取りのみが可能であることを意味します。

②関数の戻り値:

open 関数の戻り値は、ファイル記述子を表す整数です。ファイルが正常に開かれるか作成されると、返されるファイル記述子は非負の整数になります。エラーが発生した場合、戻り値は -1 であり、errno を使用して特定のエラー コードを取得できます。

3.2 読む

read 関数は、ファイル記述子からデータを読み取るために使用されるシステム コールです。これは <unistd.h> ヘッダー ファイルで宣言されており、その関数プロトタイプは次のとおりです。

#include <unistd.h> 
ssize_t read(int fd, void *buf, size_t count);

① 読み取り関数のパラメータと機能:

  • fd(ファイル記述子): これは、データを読み取るファイル記述子を示す整数値です。ファイル記述子は、開いているファイル、ソケットなどを識別するために使用される整数値です。コードでは、 open 関数を使用してファイルを開き、返されたファイル記述子が read 関数に渡されます。

  • buf(buffer): 読み取りデータが保存されるメモリ バッファへのポインタです。 read 関数は読み取ったデータをこのバッファに保存します。

  • count(読み取られたバイト数): これは、読み取られる最大バイト数です。 read 関数は、ファイルから最大 count バイトのデータを読み取ろうとします。

②関数の戻り値:

read 関数の戻り値は、ssize_t 型の整数で、実際に読み取られたバイト数を表します。戻り値は次のいずれかになります。

  • 戻り値が正の場合: 指定されたバイト数が正常に読み取られたことを示します。
  • 戻り値が 0 の場合、ファイルの終わり (EOF) に到達したことを意味します。
  • 戻り値が -1 の場合: エラーが発生しました。特定のエラー コードは errno を確認することで取得できます。

3.3 書き込み

write 関数は、ファイル記述子にデータを書き込むために使用されるシステム コールです。これは <unistd.h> ヘッダー ファイルで宣言されており、その関数プロトタイプは次のとおりです。

#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);

①write関数パラメータと関数:

  • fd(ファイル記述子): これは、データを書き込むファイル記述子を示す整数値です。ファイル記述子は、開いているファイル、ソケットなどを識別するために使用される整数値です。コードでは、 open 関数を使用してファイルを開き、返されたファイル記述子を write 関数に渡します。

  • buf(buffer): これは、書き込まれるデータを含むメモリ バッファへのポインタです。 write この関数はバッファ内のデータをファイルに書き込みます。

  • count(書き込まれたバイト数): これは書き込まれるバイト数です。 write 関数は、バッファ内のデータの最初の count バイトをファイルに書き込もうとします。

②関数の戻り値:

write 関数の戻り値は、ssize_t 型の整数で、実際に書き込まれたバイト数を表します。戻り値は次のいずれかになります。

  • 戻り値が負でない場合: 指定されたバイト数が正常に書き込まれたことを示します。
  • 戻り値が -1 の場合: エラーが発生しました。特定のエラー コードは errno を確認することで取得できます。

3.4 閉じる

close 関数は、ファイル記述子を閉じるために使用されるシステム コールです。これは <unistd.h> ヘッダー ファイルで宣言されており、その関数プロトタイプは次のとおりです。 

#include <unistd.h>
int close(int fd);

①close機能の分析:

  • fd(ファイル記述子): これは、閉じるファイル記述子を表す整数値です。ファイル記述子は、開いているファイル、ソケットなどを識別するために使用される整数値です。コードでは、 open 関数を使用してファイルを開き、返されたファイル記述子を close 関数に渡している可能性があります。

②関数の戻り値:

close 関数の戻り値は整数です。ファイルが正常に閉じられた場合、戻り値は 0 です。エラーが発生した場合の戻り値は -1 で、errno を確認することで具体的なエラー コードを取得できます。

3.5 関数の使用例

#include <fcntl.h>   // 包含文件操作相关的头文件
#include <unistd.h>  // 包含系统调用相关的头文件
#include <stdio.h>   // 包含标准输入输出库,用于使用 perror 函数

int main() {
    // 打开源文件,只读方式
    int src_fd = open("source.txt", O_RDONLY);
    if (src_fd == -1) {
        perror("Error opening source file");
        return 1;
    }

    // 打开目标文件,写入方式(如果不存在则创建)
    int dest_fd = open("destination.txt", O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (dest_fd == -1) {
        perror("Error opening destination file");
        close(src_fd);  // 关闭源文件
        return 1;
    }

    // 读取源文件数据并写入目标文件
    char buffer[1024];
    ssize_t bytes_read;

    while ((bytes_read = read(src_fd, buffer, sizeof(buffer))) > 0) {
        ssize_t bytes_written = write(dest_fd, buffer, bytes_read);
        if (bytes_written == -1) {
            perror("Error writing to destination file");
            close(src_fd);   // 关闭源文件
            close(dest_fd);  // 关闭目标文件
            return 1;
        }
    }

    // 检查读取过程中是否出错
    if (bytes_read == -1) {
        perror("Error reading from source file");
        close(src_fd);   // 关闭源文件
        close(dest_fd);  // 关闭目标文件
        return 1;
    }

    // 关闭文件
    if (close(src_fd) == -1) {
        perror("Error closing source file");
        return 1;
    }

    if (close(dest_fd) == -1) {
        perror("Error closing destination file");
        return 1;
    }

    printf("File copy successful.\n");

    return 0;
}

4、make与Makefile

4.1 make と Makefile の違い

make: make は、ソフトウェア プロジェクトの構築を自動化するためのコマンド ライン ツールです。ソース コード ファイルの最終変更日をチェックし、一連のルールと依存関係に基づいて、どのファイルを再コンパイルする必要があるかを判断します。 make 手動コンパイルの労力を軽減するために、Linux および UNIX 系システムで広く使用されています。

Makefile: Makefile は、ソフトウェア プロジェクトを構築するためのルール、依存関係、コマンドが含まれるテキスト ファイルです。これは、 make ツールにソース コード ファイルのコンパイルとリンクの方法、およびビルド プロセス中に実行する必要がある操作を指示します。 Makefile 通常、ターゲット、依存関係、実行されるコマンドが含まれます。

4.2 メイクファイルの書き込み

# 编译器
# CC = g++
CC = gcc

# 编译选项
# CFLAGS = -Wall -std=c++11
# CFLAGS = -Wall -std=c++11 -g
# CFLAGS = -Wall -std=c++11 -static
CFLAGS = -Wall

# 目标文件名
TARGET = myprogram

# 所有的源代码文件
SOURCES = main.c utils.c mytest.c

# 生成目标文件的中间文件
OBJECTS = $(SOURCES:.c=.o)

# 默认目标
all: $(TARGET)

# 生成目标文件
$(TARGET): $(OBJECTS)
	$(CC) $(CFLAGS) -o $(TARGET) $(OBJECTS)

# 编译每个源文件到目标文件
%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

# 调试目标
# debug: $(TARGET)
	# gdb ./$(TARGET)

# 清理生成的文件
clean:
	rm -f $(OBJECTS) $(TARGET)

5. vimの簡単な操作

ヘルプを表示するには「help」と入力し、Ctrl + を押します。w 然后按下 q 退出帮助

  1. Vim の起動: ターミナルに vim コマンドを入力し、その後にファイル名を入力して Vim を起動し、指定したファイルを開きます。

  2. モーダル編集: Vim にはいくつかのモードがあり、主なモードは次の 2 つです:

    • 通常モード: ナビゲーション、削除、コピーなどの操作に使用されます。
    • 挿入モード: テキストの入力に使用されます。
  3. 切换模式

    • 通常モードに入る: Esc キーを押します。
    • 挿入モードに入る: i キー (カーソルの前に挿入)、a キー (カーソルの後に挿入) または他のコマンド (次のようなコマンド) を押します。 o または O)。
  4. 保存和退出

    • ファイルを保存する: 通常モードで : キーを押し、次に w と入力して Enter キーを押します。
    • 保存して終了: 通常モードで : キーを押し、次に wq と入力して Enter キーを押します。
    • 保存せずに終了する: 通常モードで : キーを押し、次に q! と入力して Enter キーを押します。
  5. 基本移动

    • 上に移動:k
    • 下に移動:j
    • 左にシフト:h
    • 右にシフト:l
  6. 删除和复制

    • 文字を削除する: 通常モードで x キーを押します。
    • 行をコピー: 通常モードで yy を押します。
  7. 元に戻すとやり直す:

    • 元に戻す: 通常モードで u キーを押します。
    • やり直し: 通常モードで Ctrl + r キーを押します。
  8. 查找和替换

    • 検索: 通常モードで / キーを押し、検索する内容を入力して Enter キーを押します。
    • 置換: 通常モードで : キーを押し、グローバル置換の場合は %s/old/new/g と入力します。

おすすめ

転載: blog.csdn.net/qq_57594025/article/details/132523686