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はフィルターを使用して日付をフォーマットします

推薦する

DockerとFastDFSのインストールコマンドと使い方の詳しい説明

Dockerの機能1) すぐに始められるユーザーがプログラムを「Docker 化」するには、わずか数...

Vue3 の ref toRef と toRefs の違いを理解する方法

目次1. 基本1.参照2. 参照3. 参照4. 最適な使い方2. 詳細な1. なぜrefが必要なのか...

Webデザインチュートリアル(3):デザインの手順と考え方

<br />前のチュートリアル:Webデザインチュートリアル(2):模倣と盗作について。...

複数のドメイン名、ポート、IP仮想ホストに基づくNginx構成

1. タイプの導入1.1 ドメインベースの仮想ホスティングいわゆるドメイン名ベースの仮想ホストとは、...

Linux で特定の時間にコマンドを実行する方法

先日、rsync を使用して LAN 上の別のシステムに大きなファイルを転送していました。非常に大き...

2時間のDocker入門チュートリアル

目次1.0 はじめに2.0 Dockerのインストール3.0基本的なDockerコマンド4.0 Do...

CSS でインラインブロック要素間のギャップを削除するいくつかの方法の詳細な説明

最近、モバイルページを制作する際には、レイアウトにインラインブロック要素がよく使われますが、インライ...

Linux yum パッケージ管理方法

導入yum (Yellow dog Updater, Modified) は、Fedora、RedH...

Linux でディスクをマウントし、起動時に自動的にマウントするように設定する方法

皆さんの時間は貴重だと承知しているので、プロセス コマンドを直接書き留めておきます。設定できます。原...

CentOS 7 環境でソースコードから MySQL 5.7 をインストールする方法

この記事では、CentOS 7 環境でソース コードから MySQL 5.7 をインストールする方法...

CentOS 7 で Python を 3.6.6 にアップグレードした後に発生する yum エラー問題の解決方法の概要

最近、テスト サーバーのオペレーティング システムを Cent0S 7.5 にアップグレードし、Py...

docker の実行に必要な権限の分析

Docker を実行するには root 権限が必要です。非 root ユーザーに docker コマ...

Vue命令の実装原理の分析

目次1. 基本的な使い方2. 指示の動作原理2.1. 初期化2.2 テンプレートのコンパイル2.3....

MySQLとNavicatプレミアムのインストールと設定の詳細な手順

前提条件: Mac、zsh がインストールされ、bash のときに mysql がダウンロードされ、...

...