目次
システムコール" >システムコール
原子操作" >原子操作
线程安全" >线程安全
阻塞与非阻塞" >阻塞与非阻塞
同步与异步" >同步与异步
ホームページ システムチュートリアル Linux Linux 環境プログラミングで理解する必要があるいくつかの概念

Linux 環境プログラミングで理解する必要があるいくつかの概念

Feb 15, 2024 am 08:03 AM
linux Linuxチュートリアル Linuxシステム Linux オペレーティング システム 同時アクセス Linuxコマンド シェルスクリプト 同期機構 overflow 埋め込みLinux Linux を始める Linux学習

初心者の場合、Linux 環境でプログラムを作成したい場合は、コードをより適切に記述してビジネス機能を実装するために、いくつかの重要な概念を深く理解する必要があります。以下に、重要かつ一般的に使用されるいくつかの知識ポイントを紹介します。これらの概念をマスターすると、将来のコーディングでの混乱を避けることができます。

Linux 環境プログラミングで理解する必要があるいくつかの概念

システムコール

#「

すべてのオペレーティング システムのカーネルには、いくつかのシステム レベルの機能を実行するために使用できる組み込み関数がいくつかあります。 Linux システムでは、これらの関数は「システム コール」と呼ばれます。これらは、ユーザー空間からカーネル空間への移行を表します。

#メッセージを受信しました。初心者が Linux 環境でプログラミングを行う場合、コードをより適切に記述してビジネス機能を実装するには、いくつかの重要な概念を深く理解する必要があります。以下に、重要かつ一般的に使用されるいくつかの知識ポイントを紹介します。これらの概念をマスターすると、将来のコーディングでの混乱を避けることができます。 ## システム コール > ❝ > > すべてのオペレーティング システムのカーネルには、いくつかのシステム レベルの機能を実行するために使用できるいくつかの組み込み関数があります。Linux システムでは、これらの関数は「システム コール」と呼ばれます (システム コール) ) .これらは、ユーザー空間からカーネル空間への変換を表します。 > > ❞

4合計 5

もっと好きか嫌いか

システム コールは、Linux オペレーティング システムによって提供されるサービスであり、アプリケーションとカーネル間の通信を記述するためのインターフェイスであり、これを関数と呼びます。通常の関数呼び出しと比較して、システムコールのパフォーマンス消費は比較的大きくなります。したがって、プログラムはパフォーマンスを追求しますが、システム コールは避けるようにしてください。
  • ユーザーモード プログラムは、デフォルトでスタックを介してパラメーターを渡します。システムコールの場合、カーネルモードとユーザーモードは異なるスタックを使用するため、システムコールパラメータはレジスタのみを通過します。
IO 操作

#「

IOとは何ですか、平たく言えば入力と出力を意味します

# IO は標準 IO とファイル IO に分かれており、よく使用される scanf、printf、getchar、putchar、gets、puts はすべて標準入出力です。 Linux システムではすべてがファイルであるため、Linux でのプログラミングでは、ファイル IO 操作には標準 IO とファイル IO の 2 種類があります。標準 IO はバッファリングされた IO でライブラリ関数に属しますが、ファイル IO はバッファリングされずシステム コールに属します。

  • 標準 IO: リーリー
  • ファイルIO:
1.文件IO是POSIX提供的一组函数

2.只能运行在可移植操作系统中,不能跨平台

3.没有缓冲机制

4.文件描述符是一个非负整数,每打开一个文件,系统会自动分配一个文件描述符(即从系统最小的且没有被用的描述符来分配)
ログイン後にコピー

原子操作

原子在化学课程中是不可再分的颗粒。而对于Linux系统来说所谓原子操作是为了确保对一个整型数据的更改具有排他性。原子操作就是要么不执行,一旦执行就会执行完成,是不可被打断的一个,或一系列的动作,即在完成任务前不会被其他事件所打断,就像原子不可被分割成颗粒一样。单处理中,可以用单条指令完成的指令可以被看成是一个原子操作。软件中的原子操作依赖于硬件原子操作的支持。当然原子操作,也可以当引用计数使用。

  • 原子操作其实本质上和锁实现同样的功能,都是为了保护共享对象,它具有原子性,和顺序性。原子性确保指令执行期间不被打断,要么全部执行,要么根本不执行。而顺序性确保即使两条或多条指令出现在独立的执行线程中,甚至独立的处理器上,它们本该执行的顺序依然要保持。

线程安全

所谓线程安全,就是指代码可以在多线程环境下安全地执行,输出我们想要的结果。即符合正确的逻辑,是程序员期望的正常执行结果。为了实现线程安全,Linux系统提供一些列的方法,或者只能使用局部变量或资源,或者就是利用锁等同步机制,来实现全局变量或资源的访问。

  • 线程安全在Linux环境编程中极其重要,我们不仅要了解概念,更重要的是要在实际的编程中学会实现线程安全方式。下面来看一个简单的例子:
#include 
#include 
#include 

static int nCnt = 0;

void * Thread(void * arg)
{
    for (int i = 0; i return NULL;
}
int main()
{
    pthread_t t1;
    pthread_t t2;

    /* 创建两个线程 */
    pthread_create(&t1, NULL, thread, NULL);
    pthread_create(&t2, NULL, thread, NULL);

    pthread_join(t1, NULL);
    pthread_join(t2, NULL);

    printf("nCnt is %d by threads\n", nCnt);

    return 0;
}
ログイン後にコピー
  • 大家看出上面例子的问题了吗?
  • 对,没错,在此例子中我们创建了两个线程,线程函数是同一个函数,在线程函数中是对全局变量nCnt的自增操作。这个例子中输出结果和我们想要的是不一样,就是因为nCnt执行指令并不是原子的,两个个线程对nCnt的并发访问出现了问题。我们利用锁就可以解决此问题。

阻塞与非阻塞

Linux环境编程中的阻塞与非阻塞,都是指I/O操作。而所有的I/O系统调用默认都是阻塞的。那什么是阻塞? 阻塞的系统调用是指当进行系统调用时除非出错或被信号打断,那么系统调用将会一直陷入内核态直到调用完成。非阻塞的系统调用是指无论I/O操作成功与否,调用都会立刻返回。阻塞和非阻塞IO是访问设备的两种模式,驱动程序可以灵活的支持这两种用户空间对设备的访问方式。

  • 阻塞操作是指在执行操作时,若不能获得资源,则阻塞进程直到满足条件再进行操作。被阻塞的进程进入睡眠状态,被调度器的运行队列移走,直到等待的条件满足
  • 非阻塞是指在进行操作时,若不能获得资源,他要么放弃,要么返回后重新查询,直到可以进行操作为止。
  • 当数据准备好时二者的模式相同,即IO操作都是将进程阻塞,直到IO操作完成
  • 阻塞、非阻塞是设备文件、网络文件的属性

同步与异步

同步与异步,也是指I/O操作。POSIX定义如下:A synchronous I/O operation causes the requesting process to beblocked until that I/O operation completes An asynchronous I/O operation does not cause the requesting processto be blocked

    # 2 つの違いは、同期 IO は
  • IO 操作 を実行するときにプロセスをブロックしますが、非同期 IO は IO 操作 を実行するときにプロセスをブロックしないことです。
  • ブロッキング、ノンブロッキング、同期、非同期をまとめると、必然的に混乱が生じます。同期とはブロッキングを意味し、非同期とは非ブロッキングを意味しますか?実際、I/O 操作では、これらは異なる概念です。同期はブロッキングまたはノンブロッキングのいずれかであり、一般的に使用される Linux I/O 呼び出しは実際には同期です。ここでいう同期・非同期とは、I/Oデータのコピーが同期的に実行されるかどうかを指します。
  • システムコール read を例に挙げます。ブロッキング読み取りは読み取りが戻るまでカーネル状態に残ります。ノンブロッキング読み取りはデータの準備ができていない場合に直接戻り、データがある場合は読み取りが完了するまでノンブロッキング読み取りもカーネル状態に残ります。完成しました。この読み取りは同期操作です。つまり、I/O の完了は現在の実行プロセスで同期して完了します。非同期の場合、I/O 操作はシステム コールと同期して完了しません。呼び出しが戻った後、I/O 操作は完了しません。代わりに、オペレーティング システムまたは特定のスレッドが実際の I/O 操作を担当し、完了後に元のスレッドに通知されます

以上がLinux 環境プログラミングで理解する必要があるいくつかの概念の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Linuxアーキテクチャ:5つの基本コンポーネントを発表します Linuxアーキテクチャ:5つの基本コンポーネントを発表します Apr 20, 2025 am 12:04 AM

Linuxシステムの5つの基本コンポーネントは次のとおりです。1。Kernel、2。Systemライブラリ、3。Systemユーティリティ、4。グラフィカルユーザーインターフェイス、5。アプリケーション。カーネルはハードウェアリソースを管理し、システムライブラリは事前コンパイルされた機能を提供し、システムユーティリティはシステム管理に使用され、GUIは視覚的な相互作用を提供し、アプリケーションはこれらのコンポーネントを使用して機能を実装します。

GITの倉庫アドレスを確認する方法 GITの倉庫アドレスを確認する方法 Apr 17, 2025 pm 01:54 PM

gitリポジトリアドレスを表示するには、次の手順を実行します。1。コマンドラインを開き、リポジトリディレクトリに移動します。 2。「git remote -v」コマンドを実行します。 3.出力と対応するアドレスでリポジトリ名を表示します。

Apr 16, 2025 pm 07:39 PM

NotePadはJavaコードを直接実行することはできませんが、他のツールを使用することで実現できます。コマンドラインコンパイラ(Javac)を使用してByteCodeファイル(filename.class)を生成します。 Javaインタープリター(Java)を使用して、バイトコードを解釈し、コードを実行し、結果を出力します。

コードを書いた後に崇高に実行する方法 コードを書いた後に崇高に実行する方法 Apr 16, 2025 am 08:51 AM

Sublimeでコードを実行するには6つの方法があります。ホットキー、メニュー、ビルドシステム、コマンドライン、デフォルトビルドシステムの設定、カスタムビルドコマンド、プロジェクト/ファイルを右クリックして個々のファイル/プロジェクトを実行します。ビルドシステムの可用性は、崇高なテキストのインストールに依存します。

Linuxの主な目的は何ですか? Linuxの主な目的は何ですか? Apr 16, 2025 am 12:19 AM

Linuxの主な用途には、1。Serverオペレーティングシステム、2。EmbeddedSystem、3。Desktopオペレーティングシステム、4。開発およびテスト環境。 Linuxはこれらの分野で優れており、安定性、セキュリティ、効率的な開発ツールを提供します。

Laravelインストールコード Laravelインストールコード Apr 18, 2025 pm 12:30 PM

Laravelをインストールするには、これらの手順を順番に進みます。コンポーザー(MacOS/LinuxとWindows用)インストールLaravelインストーラーをインストールします。

GITソフトウェアのインストール GITソフトウェアのインストール Apr 17, 2025 am 11:57 AM

GITソフトウェアのインストールには、次の手順が含まれています。インストールパッケージをダウンロードしてインストールパッケージを実行して、インストール構成gitインストールgitバッシュ(Windowsのみ)を確認します

重要なgit構成グローバルプロパティを設定する方法 重要なgit構成グローバルプロパティを設定する方法 Apr 17, 2025 pm 12:21 PM

開発環境をカスタマイズするには多くの方法がありますが、グローバルGit構成ファイルは、ユーザー名、電子メール、優先テキストエディター、リモートブランチなどのカスタム設定に使用される可能性が最も高いものです。グローバルGIT構成ファイルについて知っておくべき重要なことは次のとおりです。

See all articles