Linuxハンドルとは何ですか
Linux では、ハンドルは識別子、つまりシステムによって管理される参照識別子です。開発者がファイル オブジェクトのハンドルを取得している限り、カーネルはハンドルを使用してカーネル内のファイル オブジェクトのアドレスを計算できます。オブジェクトは、任意の操作を実行できます。
#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。
ハンドルとは
ハンドルは識別子であり、オブジェクトのハンドルを取得する限り、任意の操作を実行できます。オブジェクト上で。
ハンドルはポインタではありません。オペレーティング システムは、ハンドルを使用してメモリの一部を検索できます。このハンドルは、識別子、マップ キー、またはポインタである可能性があります。それは、オペレーティング システムの処理方法によって異なります。それ。 fd はある程度ハンドルを置き換えるものと考えることができますが、Linux にも対応する機構はありますが、ハンドルの種類は統一されておらず、各種システムリソースはそれぞれの種類で識別され、それぞれのインターフェースで操作されます。
オペレーティング システム レベルでは、ファイル操作にも FILE と同様の概念があり、Linux ではファイル記述子 (File Descriptor) と呼ばれ、Windows ではハンドル (Handle) と呼ばれます。後述)、曖昧な場合は総称してハンドルと呼びます)。ユーザは、ある関数を介してファイルを開き、ハンドルを取得し、その後、ハンドルを介してファイルを操作する。
大まかな説明
windows はハンドル、liunx は fd に似ています。初期の Windows 開発本では、ハンドルは「ハンドル」と翻訳されています。 。音は良くありませんが、表現力はかなりあると個人的には思います。
ハンドルを握るだけですが、ドア全体を引くことができ、ドアの外観を気にする必要はありません
ドアに複数のハンドルがある場合、ドア全体を引くことができます。 (プロセス) 待ってください。ドアがどこに行くかはわかりません。
このようなハンドルを設計した理由は、ハンドルによってユーザーがファイル オブジェクトの読み書きを妨げる可能性があるためです。オペレーティング システム カーネルを自由に操作できます。 Linux であっても Windows であっても、ファイル ハンドルは常にカーネルのファイル オブジェクトに関連付けられますが、関連付けの詳細はユーザーには表示されません。カーネルはハンドルを通じてカーネル内のファイル オブジェクトのアドレスを計算できますが、この機能はユーザーには公開されていません。
liunx での処理
Linux システム設計では、すべてがファイル、つまりディスク ファイルやディレクトリであるという原則に従います。 、ネットワークソケット コネクタ、ディスク、パイプなどはすべてファイルであり、開くとファイルハンドルである fd を返します。
ファイルを頻繁に開いたり、ネットワーク ソケットを開いて解放し忘れたりすると、ハンドルがリークされます。
Linux システムでは、プロセスが呼び出すことができるファイル ハンドルの数に制限があります。デフォルトでは、各プロセスが呼び出すことができるファイル ハンドルの最大数は 1024 です。この制限を超えると、プロセスは新しいファイルを取得できなくなり、その結果、新しいファイルやネットワーク ソケットを開くことができなくなり、オンライン サーバーのサービスが拒否されます。
以下は具体的な例であり、Linux では、値 0、1、2 の fd はそれぞれ標準入力、標準出力、標準エラー出力を表します。プログラム内でファイルを開いて得られる fd は 3 から増え始めます。
fd とは正確には何ですか?
カーネルでは、各プロセスにはプライベートな「オープン ファイル テーブル」があります。このテーブルはポインタの配列であり、各要素はカーネルを指します。ファイルオブジェクト。
そして、fd はこの表の添字です。ユーザーがファイルを開くと、カーネルは内部でオープン ファイル オブジェクトを生成し、このテーブルで空の項目を見つけ、この項目が生成されたオープン ファイル オブジェクトを指すようにし、この項目の添え字を fd として返します。
このテーブルはカーネル内にあり、ユーザーはアクセスできないため、ユーザーが fd を所有していても、開いているファイル オブジェクトのアドレスを取得できず、システムが提供する関数を通じてのみ操作できます。
C 言語において、ファイルを操作するチャネルは FILE 構造です。C 言語の FILE 構造が fd と 1 対 1 の関係にあることは想像に難くありません。各 FILE 構造には、独自の対応FDです。
プログラミングにおいて、ハンドルは特別なスマート ポインターです。アプリケーションが他のシステム (データベースやオペレーティング システムなど) によって管理されているメモリ ブロックやオブジェクトを参照する場合、ハンドルが使用されます。
ハンドルと通常のポインタの違いは、ポインタには参照先オブジェクトのメモリ アドレスが含まれるのに対し、ハンドルはシステムによって管理される参照識別子であり、ハンドルによってメモリ アドレスに再配置できることです。システム。この間接オブジェクト アクセス モードにより、参照されるオブジェクトに対するシステムの制御が強化されます。
1980 年代のオペレーティング システム (Mac OS や Windows など) のメモリ管理では、ハンドルが広く使用されました。 Unix システムのファイル記述子は基本的にハンドルです。他のデスクトップ環境と同様に、Windows API はハンドルを広範囲に使用してシステム内のオブジェクトを識別し、オペレーティング システムとユーザー空間の間の通信チャネルを確立します。たとえば、デスクトップ上のフォームは、HWND タイプのハンドルによって識別されます。
現在、メモリ容量と仮想メモリ アルゴリズムの増加により、より単純なポインタの人気が高まっていますが、別のポインタを指すハンドルは人気がなくなっています。それにもかかわらず、多くのオペレーティング システムは依然としてプライベート オブジェクトへのポインターと、プロセスがハンドルとしてクライアントに渡す内部配列インデックスを参照します。
関連する推奨事項: 「Linux ビデオ チュートリアル 」
以上がLinuxハンドルとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









Linuxでnginxを開始する手順:nginxがインストールされているかどうかを確認します。 systemctlを使用して、nginxを開始してnginxサービスを開始します。 SystemCTLを使用して、NGINXがシステムスタートアップでNGINXの自動起動を有効にすることができます。 SystemCTLステータスNGINXを使用して、スタートアップが成功していることを確認します。 Webブラウザのhttp:// localhostにアクセスして、デフォルトのウェルカムページを表示します。

nginxが開始されるかどうかを確認する方法:1。コマンドラインを使用します:SystemCTLステータスnginx(Linux/unix)、netstat -ano | FindStr 80(Windows); 2。ポート80が開いているかどうかを確認します。 3.システムログのnginx起動メッセージを確認します。 4. Nagios、Zabbix、Icingaなどのサードパーティツールを使用します。

NGINXサーバーを起動するには、異なるオペレーティングシステムに従って異なる手順が必要です。Linux/UNIXシステム:NGINXパッケージをインストールします(たとえば、APT-GetまたはYumを使用)。 SystemCtlを使用して、NGINXサービスを開始します(たとえば、Sudo SystemCtl Start NGinx)。 Windowsシステム:Windowsバイナリファイルをダウンロードしてインストールします。 nginx.exe実行可能ファイルを使用してnginxを開始します(たとえば、nginx.exe -c conf \ nginx.conf)。どのオペレーティングシステムを使用しても、サーバーIPにアクセスできます

サーバーには、要求されたリソースにアクセスする許可がなく、NGINX 403エラーが発生します。ソリューションには以下が含まれます。ファイル許可を確認します。 .htaccess構成を確認してください。 nginx構成を確認してください。 SELINUXアクセス許可を構成します。ファイアウォールルールを確認してください。ブラウザの問題、サーバーの障害、その他の可能なエラーなど、他の原因をトラブルシューティングします。

Nginx 403禁止エラーを修正する方法は?ファイルまたはディレクトリの許可を確認します。 2。HTACCESSファイルを確認します。 3. nginx構成ファイルを確認します。 4。nginxを再起動します。他の考えられる原因には、ファイアウォールルール、Selinux設定、またはアプリケーションの問題が含まれます。

質問への回答:304変更されていないエラーは、ブラウザがクライアントリクエストの最新リソースバージョンをキャッシュしたことを示しています。解決策:1。ブラウザのキャッシュをクリアします。 2.ブラウザキャッシュを無効にします。 3.クライアントキャッシュを許可するようにnginxを構成します。 4.ファイル許可を確認します。 5.ファイルハッシュを確認します。 6. CDNまたは逆プロキシキャッシュを無効にします。 7。nginxを再起動します。

Linuxでは、次のコマンドを使用して、nginxが起動されるかどうかを確認します。SystemCTLステータスNGINXコマンド出力に基づいて、「アクティブ:アクティブ(実行)」が表示された場合、NGINXが開始されます。 「アクティブ:非アクティブ(dead)」が表示されると、nginxが停止します。

エラーログは、/var/log/nginx(Linux)または/usr/local/var/log/nginx(macos)にあります。コマンドラインを使用して手順をクリーンアップします。1。元のログをバックアップします。 2。新しいログとして空のファイルを作成します。 3。nginxサービスを再起動します。自動クリーニングは、LogroTateや構成などのサードパーティツールでも使用できます。
