Linux でのファイル タイプの概要
この記事の内容は、Linux でのいくつかのファイルの種類を紹介することです。必要な方は参考にしていただければ幸いです。 [ビデオチュートリアルの推奨: Linux チュートリアル ]
Linux システムでは、次の 7 種類のファイルがあります。
通常のファイル ( - )
- ##ディレクトリ (d)
- 通常のファイル、ディレクトリ、およびソフト リンクについては、これ以上の説明は不要です。パイプ ファイル、ソケット ファイル、キャラクタ デバイス、およびブロック デバイス タイプを見てみましょう。
パイプ ファイル
パイプは、
匿名パイプと名前付きパイプに分割されます。パイプは一方の端で書き込まれ、もう一方の端で読み取られます。これらは一方向のデータ送信であり、パイプは親プロセスの書き込みや子プロセスの読み取りなどのプロセス間通信の方法です。 。 シェルでは、匿名パイプはパイプ記号「|」です (
ls | grep xxx など)。ls に対応するプロセスは、この独立したプロセス グループの親プロセスです。と grep に対応するプロセス 子プロセスです。親プロセスは書き込み、子プロセスは読み取りを行います。 プログラミング言語では、匿名パイプは 2 つのファイル ハンドルまたはファイル記述子 (A、B など) を作成することによって実装されます (A 書き込み終了、データ書き込み終了など)。自動的にそれを B) にプッシュし、別のファイル ハンドルを使用してデータ (つまり B) を読み取ります。
名前付きパイプ、つまり名前付きパイプの場合、名前付きパイプはファイル システムにファイルを保持します。これは先入れ先出しを意味する FIFO とも呼ばれます。名前付きパイプ ファイルはファイル システムに保持されますが、このファイルは名前付きパイプを使用するためのエントリ ポイントにすぎず、名前付きパイプを使用してデータを送信する場合もメモリ内で実行されます。つまり、名前付きパイプはメモリ上に保持されません。名前付きパイプは効率が低くなります。
シェルでは、
mknod コマンドまたは mkfifo
コマンドを使用して名前付きパイプを作成できます。名前付きパイプは、特定の特殊なシェル スクリプトを作成するときに非常に便利です。ニーズ。実際、コルーチンの機能 (coproc コマンドを使用) は Bash 4 以降サポートされています (ksh と zsh は長い間コルーチンをサポートしていました)。しかし、コルーチンのニーズは名前付きパイプを通じて実現できます。 一般的なパイプラインは一方向通信であり、双方向通信の機能を実現できません。つまり、同時に書き込みと読み取りのみが可能で、両側での読み取りと書き込みはできません。双方向通信を実現したい場合は、2 つのパイプ (つまり、4 つのファイル ハンドル、2 つの読み取り端、2 つの書き込み端がある) を作成するか、より便利なソケットを使用できます。
ソケット
ソケットは、両端間の通信を実現するために使用されます。上記で分析したように、双方向パイプラインのプロセス間通信機能を実現できます。それだけでなく、ソケットはネットワークを介してホストを越えたプロセス間通信も実現します。
ソケットは意味を持たせるためにペアにする必要があります。つまり、ソケットは 2 つの端に分かれており、それぞれの端に読み取りと書き込みのためのファイル記述子 (またはファイル ハンドル) があり、これは 2 つの双方向通信に相当します。パイプ。
ソケットは、プロトコル ファミリに従って、ネットワーク ソケット (AF_INET タイプ、ipv4 と ipv6 に従って inet4 と inet6 に分割) と Unix ドメイン ソケット (AF_UNIX タイプ) の 2 つのカテゴリに分類されます。もちろん、ソケットはプロトコル ファミリからさらに多くのタイプに細分化できます。たとえば、INET ソケットは、TCP ソケット、UDP ソケット、リンク層ソケット、Raw ソケットなどに分類できます。その中でも、ネットワーク ソケットはネットワーク プログラミングの基礎であり、中核です。
Unix ドメイン ソケット
スタンドアロンのプロセス間通信には、Inet ソケットよりも Unix ドメイン ソケットを使用する方が良いです。これは、Unix ドメイン ソケットにはネットワーク通信コンポーネントがなく、単に不足しているためです。ネットワーク機能が豊富で軽量です。実際、特定のオペレーティング システム プラットフォーム上の一部の言語で実装されているパイプライン機能は Unix ドメインを通じて実装されており、その効率の高さは想像できます。
Unix ドメイン ソケットには 2 つのファイル ハンドル (A、B など) があり、両方のファイル ハンドルは同時に読み取り可能であり、書き込み可能です。プロセス 1 がデータを A に書き込むと、そのデータは自動的に B にプッシュされます。プロセス 2 は、A から書き込まれたデータを B から読み取ることができます。同様に、プロセス 2 がデータを B に書き込むと、自動的に A にプッシュされます。プロセス 1 は読み取りができますB から A に書き込まれたデータ。以下のように:
进程1 进程2 ------------------------ A -----------> B B -----------> A
プログラミング言語では、Unix ドメイン ソケットの作成には、当然のことながら、それを簡単に作成するための対応する関数があります (
manソケットペアが可能)。 bash シェルの場合は、nc
コマンド (NetCat) を使用して作成するか、単純に 2 つの名前付きパイプを使用して対応する関数を実装できます。必要に応じて、bash シェルで Unix ドメイン ソケットを使用する方法を学ぶことができます。 ネットワーク ソケット
ネットワークを介したプロセス間通信には、ネットワーク ソケットが必要です。すべてのネットワーク ソケットは、ソケットの 5 タプルと呼ばれる 5 つの部分で構成されています。形式は次のとおりです。
{protocol, src_addr, src_port, dest_addr, dest_port}
つまり、プロトコル、送信元アドレス、送信元ポート、宛先アドレス、および宛先ポート。
ソケットの各エンドにはカーネル空間に 2 つのバッファーがあり (つまり、1 組のソケットには 4 つのバッファーがあります)、各エンドには受信バッファーと送信バッファーがあります。プロセス 1 は、自身のソケットの送信バッファにデータを書き込み、そのデータはピアの受信バッファに送信され、ピアのプロセス 2 は受信バッファからデータを読み取ることができ、その逆も同様です。
ただし、実際にネットワーク ソケットの読み取りと書き込みを行う前に、ネットワーク ソケットにいくつかの設定が必要です。サーバーソケットが作成された後 (socket() 関数、読み取りおよび書き込み操作のためのファイルハンドルまたはファイル記述子が存在します)、アドレス (bind() 関数を介して) とリスニングポート (listen() を介して) もバインドする必要があります。 ) 関数)、クライアントはソケットを作成し、connect() 関数を直接使用してサーバーソケットへの接続リクエストを開始するだけで済みます。
TCP ソケットの場合、クライアントが接続要求を開始するとき、それはサーバーとの 3 ウェイ ハンドシェイクを実行する必要があることを意味します (カーネルによって完了され、ユーザー空間プロセスとは何の関係もありません)。これら 3 つのハンドシェイクをそれぞれ詳しく説明します。クライアントが初めて SYN 要求を送信したとき、サーバーが SYN を受信した後、カーネルは接続を syn キューに入れ、ステータスを syn-recv に設定し、ack syn をサーバーに送信します。一方、クライアントの応答 ack を受信した後、カーネルは接続を syn キューから確立されたキュー (または受け入れキュー) に移動し、接続のステータスを確立済みとしてマークします。最後に、ユーザー空間を待機しているプロセスは、accept() システム コールを開始して、カーネルに受け入れキューからユーザー空間を削除させます。 accept()後の接続は接続が確立したことを示しており、真に両端のプロセス間のデータ送信が実現できます。
TCP ソケットの原理の詳細については、私の別の記事「知っておくべきソケットと TCP 接続プロセス」を参照してください。
ブロック デバイスとキャラクター デバイス
ブロック デバイスは、固定サイズのデータ チャンクへのランダム (必ずしも順次ではない) アクセスによって区別されるハードウェア デバイスです。固定サイズのチャンクはブロックと呼ばれます。 最も一般的なブロック デバイスはハードディスクですですが、フロッピー ドライブ、Blu-ray リーダー、フラッシュ メモリなど、他にも多くのブロック デバイスが存在します。これらはファイル システムがマウントされているデバイスであり、ファイル システムはブロック デバイスの共通語のようなものであることに注意してください。
キャラクタ デバイスは、バイトごとに連続したデータ ストリームを通じてアクセスされます。 典型的なキャラクター デバイスは、端末 (物理端末と仮想端末の両方でさまざまな種類の端末があります) とキーボード です。
ブロック デバイスとキャラクター デバイスを区別する最も簡単な方法は、データへのアクセス方法に注目することです。ブロック デバイスはデータを取得するためにランダムにアクセスできますが、キャラクタ デバイスはバイト オーダー でアクセスする必要があります。
ここで少しのデータを読み取り、そこから少しのデータを読み取り、最終的にそれを連続したデータにつなげることができる場合、これは、ハードディスク上のデータが不連続であるのと同じように、ブロック デバイスです。データを取得するには、ランダム アクセス方式でアクセスする必要がある場合があります。たとえば、ディスク上の少し大きなファイルでは、最初の 10,000 個のデータが連続したデータ ブロックまたは連続したセクターに存在し、次の 10,000 個のデータがそこから遠く離れているか、異なるシリンダー上にある可能性があります。
データ内の各バイトがアクセス時と同じバイト順序である場合、つまり、バイト順序がアクセス時からデータの最終処理まで完全に一貫している場合、これはキャラクターデバイス。つまり、キャラクター デバイスはストリーム デバイスと考えることができます。キーボードでデータを入力するのと同じように、2 つのキーを連続して押した場合、これら 2 つのキーに対応するバイト データを受信したときに、最初に前に入力し、次に後ろに入力する必要があります。同様に、端末デバイスも同様に動作します。プログラムが端末にデータを出力するとき、プログラムは最初に文字 a を出力し、次に数字の 3 を出力します。その後、端末に表示されるときは、a が前にあり、3 が後ろにある必要があります。後ろ。
以上がLinux でのファイル タイプの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Stock Market GPT
AIを活用した投資調査により賢明な意思決定を実現

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

LinuxプロセスをリアルタイムFIFOスケジューリングで実行するには、CHRTコマンドまたはSched_SetsCheduler System Callを使用して、Sudochrt-F999./AppまたはConfigure sched_fifoおよびPriorityパラメーターをCプログラムで設定し、プロセスがCAP_Sys_sys_Sys_sysの能力またはrutの責任を介してCAP_Sys_Sys_sysの可能性を介して構成されていることを確認する必要があります。実際のタイミングを確保し、優先度の逆転を避けるため。優先順位継承をサポートするミューテックスを使用する必要があります。

AISIアシスタントの公式ダウンロードポータルは、公式Webサイトhttps://www.i4.cn/にあり、コンピューターとモバイルのダウンロード、デバイス管理、アプリケーションのインストール、モードスイッチング、画面投影、ファイル管理機能をサポートしています。

.debパッケージをインストールするための一般的な方法は次のとおりです。DPKGコマンドを使用して、依存関係を修復するためにAPTをインストールして使用します。 2。依存関係を自動的に処理するには、aptinstall./package_name.debを使用することをお勧めします。 3.ファイルをダブルクリックして、ソフトウェアセンターをグラフィカルな方法でインストールできます。 4.インストール後、DPKG-LまたはDPKG-Sを使用して、パッケージのステータスを確認できます。

AdduserまたはuserAddを使用してユーザーを作成します。2。Usermod、3。デルーザーまたはユーザーデルでユーザーを削除するユーザーを変更します。GroupAddを使用してグループを作成します。5。ユーザーをGroup with Group with Groupd-dでグループに追加します。アカウント、パスワードポリシーの設定、およびグループ許可を合理的に割り当てる。これらのコアコマンドを習得し、配布に従って適切なツールを選択することにより、Linuxユーザーとグループの管理を効果的に実現できます。

torunwindowsprogramsonlinux、trythesemethods:1.usewinetodirectlyrun.exefiles.2.installplayonlinuxforeasierwinemanagement.3.setupawindowsvirtualmachinewithuatualbox.4.uselutristoinstallandrunwindowsgameshemeshemaseam

9月18日の最新ニュースであるHuawei Harmonyos6は、開発者向けに複数のラウンドのプレビューバージョンプッシュを開始し、最近、初めて試した一部のユーザーに経験資格を開きました。ユーザーのフィードバックによると、現在のシステム名は「次の」サフィックスを表示しなくなり、HarmonyOs6.0に正式に名前が変更されています。 Huaweiは、2023年8月の開発者会議で初めてHarmonyOsNextという名前を提案し、Hongmengシステムに新しい開発段階に入り、真のネイティブの自己開発を実現することを目指しています。 HarmonyOsNextの最もコアブレークスルーは、独立して開発された基礎となるシステムアーキテクチャを完全に採用し、LinuxカーネルとAndroid AOSPコードを完全に除去し、Harmonyosカーネルに基づいてアプリケーションのみを実行することです。

totakescreenshotsonlinux:1。useprtscnkeyforfullscreen、alt prtscnforactivewindow.2.usegnomescreenshottoolformoreoptions.3.usegnome-screenshotcommandinterminal.4.installandusesscrotorotforlightweight commandercapturing。

toallvscodeonlinux、usetheofficialaptrepositoryforautomaticupdates、snapforcross-distribution compatibility、oramanualtarballfulfullcontrol.choosebasedonyoursystemandss。
