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

推薦する

Serv-U FTPとADの完璧な統合ソリューションの詳細な説明

会社が現在使用しているソリューションを確認するためにバックエンドにログインしました。使用される FT...

要素のフォーム要素の使用の概要

フォーム要素はたくさんあります。簡単にまとめると、次のようになります。私のやり方では、主にテキスト ...

純粋な CSS を使用して脈動するローダー効果のソースコードを作成する

効果プレビュー右側の「クリックしてプレビュー」ボタンを押すと現在のページでプレビューが表示され、リン...

Dockerとiptablesとブリッジモードのネットワーク分離と通信操作の実装

Docker は、ブリッジ、ホスト、オーバーレイなどの複数のネットワークを提供します。同じ Dock...

CentOS 8 カスタム ディレクトリ インストール nginx (チュートリアルの詳細)

1. ツールとライブラリをインストールする# PCRE は、Perl 互換の正規表現ライブラリを含...

Vue フロントエンド開発補助機能状態管理詳細例

目次マップ状態マップゲッターマップミューテーションマップアクション例まとめマップ状態コンポーネントが...

Dockerのネットワークモードと設定方法

1. Dockerネットワークモードdocker run が Docker コンテナを作成するときに...

サイト全体を灰色にするCSSコードのまとめ

国務院は本日、新型コロナウイルス感染症との闘いで殉教した方々と犠牲者に対し、全国各民族人民の深い哀悼...

Centos6 で 20TB を超えるディスクをパーティション分割してフォーマットするためのサンプル コード

1. サーバー環境の構成: 1. ディスクパーティションを確認します。最近、あるプロジェクト内のサー...

MySQL 5.7.21 winx64 無料インストールバージョン設定方法グラフィックチュートリアル

MySQL 5.7.21 winx64無料インストールバージョンの設定方法、参考までに、具体的な内容...

JavaScript ドラッグタイム ドラッグケースの詳細な説明

目次DragEvent インターフェースデータ転送インターフェースの概要DataTransfer の...

インラインブロックを使用した複数のdiv間の間隔はプログラミング方法とは異なります

inline-block について学習しているときに、境界線と inline-block を持つ複数...

HTML ウェブページのメタビューポート属性の説明

HTML メタビューポート属性の説明ビューポートとはモバイル ブラウザは、Web ページを仮想の「ウ...

スクラッチ宝くじの例を実現する JavaScript キャンバス

この記事では、スクラッチ効果を実現するためのJavaScriptキャンバスの具体的なコードを参考まで...