Linuxのファイル操作の知識ポイントを詳しく解説

Linuxのファイル操作の知識ポイントを詳しく解説

ファイル操作に関連するシステムコール

作成する

int creat(const char *ファイル名, mode_t モード);

パラメータ mode は、新しく作成されたファイルのアクセス許可を指定します。パラメータ mode と umask の組み合わせで、ファイルの最終的なアクセス許可 (mode と umask) が決まります。umask は、ファイルの作成時に削除する必要があるアクセス許可の一部を表します。これは、読み取り、書き込み、および実行のアクセス許可にのみ影響します。呼び出し関数は int umask (int newmask) です。

開ける

int open(const char *パス名、int フラグ);

パス名は、開きたいファイル名です(パス名を含みます。デフォルトは現在のパスです)

フラグを開くフラグ

O_RDONLY ファイルを読み取り専用で開く

O_WRONLY ファイルを書き込み専用で開く

O_RDWR ファイルを読み取りと書き込み用にオープンする

O_APPEND ファイルを追加モードで開く

O_CREAT ファイルを作成する

O_EXEC O_CREAT が使用され、ファイルがすでに存在する場合、エラーが発生します。

O_NOBLOCK 非ブロッキングモードでファイルを開く

O_TRUNC ファイルがすでに存在する場合は、ファイルの内容を削除します。

int オープン (const char *パス名、int フラグ、mode_t モード)

フラグが O_CREATE の場合、ファイルのアクセス権を示すモード フラグを指定します。

S_IRUSR ユーザーは読み取り可能

S_IWUSRユーザーは書き込み可能

S_IXUSRユーザーは実行できる

S_IRWXU ユーザーは読み取り、書き込み、実行が可能です

S_IRGRPグループは、

S_IWGRPグループは書き込み可能

S_IXGRPグループは実行できる

S_IRWXGグループは読み取り、書き込み、実行が可能です

S_IROTH 他の人が読める

S_IWOTH 他の人が書くことができます

S_IXOTH 他の人が実行できる

S_IRWXO 他のユーザーは読み取り、書き込み、実行が可能です

S_ISUID ユーザーの実行IDを設定する

S_ISGID グループの実行IDを設定する

モード フラグでは、ファイルのアクセス許可を表すために数字を使用することもできます。

各数値は、1 (実行権限)、2 (書き込み権限)、4 (読み取り権限)、0 (なし)、またはこれらの値の合計になります。

最初の数字はユーザーIDの設定を示します

2桁目はグループIDを示します

3番目のビットはユーザー自身の許可ビットを示します

4桁目はグループの権限を示します

5桁目は他人の権限を示す

オープン("テスト", O_CREAT, 10705);

上記のステートメントは以下と同等です:

オープン("テスト", O_CREAT, S_IRWXU | S_IROTH | S_IXOTH | S_ISUID);

読み書き

int 読み取り(int fd、const void *buf、size_t 長さ);
int 書き込み(int fd, const void *buf, size_t 長さ);

パラメータ fd はファイル記述子、buf はバッファへのポインタ、length はバッファのサイズ (バイト単位)、戻り値は実際に読み書きされたバイト数です。

read()は、ファイル記述子fdで指定されたファイルから長さバイトをbufが指すバッファに読み込み、戻り値は実際に読み込まれたバイト数です。

write() 実装は、buf が指すバッファからファイル記述子 fd が指すファイルに length バイトを書き込み、戻り値は実際に書き込まれたバイト数になります。

位置

ランダム ファイルの場合、読み取りと書き込みの場所をランダムに指定できます。
int lseek(int fd, offset_t オフセット, int whence);

lseek() は、whence を基準として、ファイルの読み取り/書き込みポインターを offset (負の値も可) バイト移動します。操作が成功した場合、ファイル ヘッダーを基準としたファイル ポインターが返されます。

whence パラメータには次の値を使用できます。

SEEK_SET: ファイルの先頭からの相対位置。
SEEK_CUR: 相対ファイル読み取りおよび書き込みポインターの現在の位置。
SEEK_END: ファイルの末尾からの相対位置。

閉鎖

int 閉じる(int fd);

C ライブラリ関数ファイル操作 - 特定のオペレーティング システム プラットフォームに依存しない

作成して開く

FILE *fopen(const char *path, const char *mode);
fopen() は指定されたファイル filename を開きます。ここで mode は開くモードです。Linux システムはバイナリ ファイルとテキスト ファイルを区別しません。

モードの価値

r, rb 読み取り専用モードで開く

w、wb 書き込み専用です。ファイルが存在しない場合は作成され、存在する場合は切り捨てられます。

a、ab は追加モードで開かれます。ファイルが存在しない場合は作成します

r+、r+b、rb+ は読み取り/書き込みモードで開きます

w+、w+b、wh+ 読み取りと書き込み用に開きます。ファイルが存在しない場合は新しいファイルが作成され、存在する場合はファイルが切り捨てられます。

a+、a+b、ab+ 読み取りおよび追加用に開きます。ファイルが存在しない場合は、新しいファイルを作成します

読み書き

int fgetc(FILE *ストリーム);
int fputc(int c, FILE *ストリーム);
char *fgets(char *s, int n, FILE *stream);
int fputs(const char *s, FILE *stream);
int fprintf(FILE *ストリーム、const char *フォーマット、...);
int fscanf (FILE *ストリーム、const char *フォーマット、...);
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
size_t fwrite (const void *ptr, size_t size, size_t n, FILE *stream);
int fsetpos(FILE *ストリーム、fpos_t *pos);
nt fsetpos(FILE *ストリーム、const fpos_t *pos);
int fseek(FILE *ストリーム、long オフセット、int whence);

fread() は、ストリームから n フィールドを読み取ります。各フィールドは size バイトであり、読み取ったフィールドを ptr が指す文字配列に格納し、実際に読み取ったフィールドの数を返します。

write() は、buffer ptr が指す配列から n フィールドをストリームに書き込みます。各フィールドの長さは size バイトで、実際に書き込まれたフィールドの数を返します。

閉鎖

int fclose (FILE *ストリーム);

Linux ファイルシステムのディレクトリ構造

/bin---- ls、cp、mkdir などの最も頻繁に使用される基本コマンドが格納されます。このディレクトリ内のすべてのファイルは実行可能です。

/boot----Linux の起動時に使用されるコア ファイル (vmlinuz、initrd.img などの接続ファイルやイメージ ファイルを含む)

/dev----デバイスファイル保存ディレクトリ。アプリケーションはこれらのファイルを読み書きおよび制御することで実際のデバイスにアクセスできます。

/etc---- ユーザー アカウントやパスワード構成ファイルなど、システム管理に必要な構成ファイルとサブディレクトリ。

/home----一般ユーザーのホーム ディレクトリ。各ユーザーには独自のディレクトリがあり、通常はユーザーのアカウントに基づいて名前が付けられます。

/lib---- ライブラリ ファイルが格納されるディレクトリ。Windows の DLL ファイルに似た、システムの最も基本的なダイナミック リンク共有ライブラリです。

/lost+found----通常は空です。システムが予期せずクラッシュしたり、マシンが予期せずシャットダウンしたりすると、いくつかのファイルフラグメントが生成され、ここに配置されます。

/mnt----ユーザーが他のファイルシステムを一時的にマウントするのに便利です。たとえば、CD-ROM ドライブを /mnt/ にマウントすると、このディレクトリに入ると CD-ROM ドライブの内容を表示できます。

メディア---- USB フラッシュ ドライブ、光学ドライブなどの一部のデバイスを自動的に識別し、このディレクトリにマウントします。

/opt----ホストにインストールされた追加ソフトウェアを保存するディレクトリ

/proc---- オペレーティングシステムが実行中の場合、プロセスとカーネルの情報 (CPU、ハードディスクのパーティション、メモリ情報など) がここに保存されます。システムメモリのマッピングであり、メモリ内に存在します。このディレクトリに直接アクセスすることでシステム情報を取得します。

/root----スーパー特権ユーザーのホームディレクトリ

/sbin----スーパー特権ユーザーの実行可能コマンドが保存されるディレクトリ。通常のユーザーにはこのディレクトリ内のコマンドを実行する権限はありません。

/tmp-----一時ファイルを保存します。

/usr----- Windows のプログラム ファイル ディレクトリと同様に、システム アプリケーションとファイル (コマンドやヘルプ ファイルなど) が保存されるディレクトリ。

/var-----ログファイルなど、頻繁に変更されるディレクトリはこのディレクトリに配置されます

/sys----カーネルデバイスツリーの視覚的な反映。カーネル オブジェクトが作成されると、対応するファイルとディレクトリもカーネル オブジェクト サブシステムに作成されます。

/initrd --- 起動プロセス中に initrd イメージが一時ルート ファイル システムとして使用される場合、その上で /linuxrc を実行して実際のルート ファイル システムをマウントした後、元の初期 RAM ファイル システムが /initrd ディレクトリにマップされます。

Linux ファイルシステムとデバイスドライバー

以下もご興味があるかもしれません:
  • Linuxのファイル権限の詳細な紹介
  • Linux で unzip コマンドを使用して複数のファイルを解凍する方法
  • Linux パーティション ファイル システム タイプの概要
  • CentOSにjdk1.8をインストールすると、/lib/ld-linux.so.2が存在しません。このファイルの原因分析
  • Golang を使用して Linux 上のファイルのアクセス/作成/変更時間を取得する
  • Linuxシステムのファイル転送方法
  • Linux で tail を使用してログ ファイルを表示する方法
  • SSH経由でLinuxサーバーにファイルやフォルダをアップロードする方法
  • FileZilla を使用して Linux からファイルをダウンロードする方法

<<:  Vueはシンプルな計算機を実装する

>>:  Vueはフィルターを使用して日付をフォーマットします

推薦する

IdeaはリモートDockerをデプロイし、ファイルを構成する

1. LinuxサーバーのDocker構成ファイルを変更する vim /usr/lib/system...

Dockerを使用してgitlabコミュニティの中国語版を構築する詳細なプロセスを教えます

1. Docker Composeを使用して起動を構成するDocker Compose を知らない場...

Docker を使ってゼロから SOLO 個人ブログを構築する方法

目次1. 環境整備2. Dockerをインストールする3. MySQLマスタースレーブデータベースを...

MySQL 5.7.25 のインストールと設定方法のグラフィックチュートリアル

MySQL インストール ファイルには、msi 形式と zip 形式の 2 種類があります。クリック...

Ubuntuはポート22を開きます

シナリオssh 経由で Ubuntu サーバーに接続するには、xshell ツールを使用する必要があ...

純粋な CSS を使用してユーザーが Web ページのコンテンツをコピーするのを防ぐ方法

序文私自身の個人ブログを入力しているときに、ブログの詳細ページでさまざまなコンテンツをコピーするさま...

例を通してMySQLの更新がテーブルをロックするかどうかを判定する

2つのケース: 1. 索引あり 2. 索引なし前提条件:方法: コマンドラインを使用してシミュレート...

VUEはG2チャートを使用した実装を導入します

目次G2チャートについて使用テンプレートで使用される完全なコード (棒グラフ)世界地図を追加するG2...

vue N​​progress のプログレスバー機能を実装する際の一般的な問題

NProgress は、ページがジャンプしたときにブラウザの上部に表示される進行状況バーです。公式ウ...

MySQL 5.7 のユニオンオール使用法のブラックテクノロジーを 5 分で学ぶ

MySQL 5.6 での union all のパフォーマンスパート 1:MySQL 5.6.25 ...

SQL と NoSQL の違いのまとめ

主な違い: 1. タイプSQL データベースは主にリレーショナル データベース (RDBMS) とし...

ウェブサイトに天気予報を挿入する方法

天気予報をウェブサイトに挿入すると、次のような効果が得られます。次のコードを挿入する必要があります:...

MySQL のデータ型とフィールド属性の原理と使用法の詳細な説明

この記事では、MySQL のデータ型とフィールド属性について説明します。ご参考までに、詳細は以下の通...

HTML テーブル マークアップ チュートリアル (28): セルの境界線の色属性 BORDERCOLOR

テーブルを美しくするために、セルごとに異なる境界線の色を設定できます。基本的な構文<TD 境界...