成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么應該在Linux上使用命名管道

系統 Windows
命名管道并不常用,但是它們為進程間通訊提供了一些有趣的特性。普通管道與命名管道的一個主要區別就是命名管道是以文件形式實實在在地存在于文件系統中的,沒錯,它們表現出來就是文件。但是與其它文件不同的是,命名管道文件似乎從來沒有文件內容。即使用戶往命名管道中寫入大量數據,該文件看起來還是空的。

[[219549]]

命名管道并不常用,但是它們為進程間通訊提供了一些有趣的特性。

估計每一位 Linux 使用者都熟悉使用 “|” 符號將數據從一個進程傳輸到另一個進程的操作。它使用戶能簡便地從一個命令輸出數據到另一個命令,并篩選出想要的數據而無須寫腳本進行選擇、重新格式化等操作。

還有另一種管道, 雖然也叫“管道”這個名字卻有著非常不同的性質。即您可能尚未使用甚至尚未知曉的——命名管道。

普通管道與命名管道的一個主要區別就是命名管道是以文件形式實實在在地存在于文件系統中的,沒錯,它們表現出來就是文件。但是與其它文件不同的是,命名管道文件似乎從來沒有文件內容。即使用戶往命名管道中寫入大量數據,該文件看起來還是空的。 

如何在 Linux 上創建命名管道

在我們研究這些空空如也的命名管道之前,先追根溯源來看看命名管道是如何被創建的。您應該使用名為 mkfifo 的命令來創建它們。為什么提及“FIFO”?是因為命名管道也被認為是一種 FIFO 特殊文件。術語 “FIFO” 指的是它的先進先出first-in, first-out特性。如果你將冰淇淋盛放到碟子中,然后可以品嘗它,那么你執行的就是一個LIFO(后進先出last-in, first-out操作。如果你通過吸管喝奶昔,那你就在執行一個 FIFO 操作。好,接下來是一個創建命名管道的例子。

  1. $ mkfifo mypipe
  2. $ ls -l mypipe
  3. prw-r-----. 1 shs staff 0 Jan 31 13:59 mypipe

注意一下特殊的文件類型標記 “p” 以及該文件大小為 0。您可以將重定向數據寫入命名管道文件,而文件大小依然為 0。

  1. $ echo "Can you read this?" > mypipe

正如上面所說,敲擊回車后似乎什么都沒有發生(LCTT 譯注:沒有返回命令行提示符)。

另外再開一個終端,查看該命名管道的大小,依舊是 0:

  1. $ ls -l mypipe
  2. prw-r-----. 1 shs staff 0 Jan 31 13:59 mypipe

也許這有違直覺,用戶輸入的文本已經進入該命名管道,而你仍然卡在輸入端。你或者其他人應該等在輸出端,并準備讀取放入管道的數據。現在讓我們讀取看看。

  1. $ cat mypipe
  2. Can you read this?

一旦被讀取之后,管道中的內容就沒有了。

另一種研究命名管道如何工作的方式是通過將放入數據的操作置入后臺來執行兩個操作(將數據放入管道,而在另外一段讀取它)。

  1. $ echo "Can you read this?" > mypipe &
  2. [1] 79302
  3. $ cat mypipe
  4. Can you read this?
  5. [1]+ Done echo "Can you read this?" > mypipe

一旦管道被讀取或“耗干”,該管道就清空了,盡管我們還能看見它并再次使用。可為什么要費此周折呢? 

為何要使用命名管道?

命名管道很少被使用的理由似乎很充分。畢竟在 Unix 系統上,總有多種不同的方式完成同樣的操作。有多種方式寫文件、讀文件、清空文件,盡管命名管道比它們來得更高效。

值得注意的是,命名管道的內容駐留在內存中而不是被寫到硬盤上。數據內容只有在輸入輸出端都打開時才會傳送。用戶可以在管道的輸出端打開之前向管道多次寫入。通過使用命名管道,用戶可以創建一個進程寫入管道并且另外一個進程讀取管道的流程,而不用關心協調二者時間上的同步。

用戶可以創建一個單純等待數據出現在管道輸出端的進程,并在拿到輸出數據后對其進行操作。下列命令我們采用 tail 來等待數據出現。

  1. $ tail -f mypipe

一旦供給管道數據的進程結束了,我們就可以看到一些輸出。

  1. $ tail -f mypipe
  2. Uranus replicated to WCDC7
  3. Saturn replicated to WCDC8
  4. Pluto replicated to WCDC9
  5. Server replication operation completed

如果研究一下向命名管道寫入的進程,用戶也許會驚訝于它的資源消耗之少。在下面的 ps 命令輸出中,唯一顯著的資源消耗是虛擬內存(VSZ 那一列)。

  1. ps u -P 80038
  2. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  3. shs 80038 0.0 0.0 108488 764 pts/4 S 15:25 0:00 -bash

命名管道與 Unix/Linux 系統上更常用的管道相比足以不同到擁有另一個名號,但是“管道”確實能反映出它們如何在進程間傳送數據的形象,故將稱其為“命名管道”還真是恰如其分。也許您在執行操作時就能從這個聰明的 Unix/Linux 特性中獲益匪淺呢。 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2020-09-18 07:01:38

分頁offsetlimit

2016-06-13 09:30:59

Linux云計算云解決方案

2013-09-30 09:49:06

存儲網絡FCoE存儲

2015-09-28 08:57:06

Ruby APPNeo4j

2021-08-27 07:25:58

Kubernetes云服務Stack Overf

2021-01-08 10:48:48

碼農編程編碼測試

2015-07-06 10:44:31

Node.js開發

2023-04-04 08:10:40

CSS字體元素

2020-06-30 11:57:04

云端數據處理存儲

2013-07-15 10:32:32

Windows虛擬機紅帽

2020-04-09 09:10:23

Python編程語言開發

2021-11-15 05:49:01

CIO管理層建立關系

2010-02-25 17:17:12

Linux桌面電腦

2021-04-16 09:31:07

Rosetta 2安全軟件攻擊

2019-09-24 15:07:51

大數據存儲技術

2024-04-30 14:49:02

云平臺云數據庫

2021-09-06 11:02:45

LinuxMarkdown編輯器

2020-03-09 13:58:19

機器人機器人流程自動化RPA

2009-09-04 08:28:26

2018-10-07 23:00:37

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天综合天天 | 亚洲天堂av在线 | 久久国| 亚洲精品天堂 | 国产 91 视频| 亚洲日日夜夜 | 农夫在线精品视频免费观看 | 亚洲视频在线免费观看 | 日本三级在线 | 精品亚洲一区二区三区四区五区 | 天天拍天天操 | 羞羞视频网 | a免费在线| 国产精品无码久久久久 | 中文字幕日韩欧美一区二区三区 | 美国十次成人欧美色导视频 | 免费观看一级特黄欧美大片 | 91久色| 亚洲日本中文 | 亚洲性爰| 在线毛片网 | 久久久久9999亚洲精品 | 久久久精品综合 | 国产线视频精品免费观看视频 | 欧美人成在线视频 | 欧美三区 | 久久99精品久久 | 成人精品福利 | 中文字幕精品一区久久久久 | 成人在线免费av | 女同久久另类99精品国产 | 国产精选一区 | 日韩高清电影 | 午夜精品视频 | 国产91丝袜在线播放 | 中文字幕国产一区 | 中文字幕一区二区三区不卡 | 亚洲欧洲视频 | 久久久久久久亚洲精品 | 亚洲电影一区 | 久久国产精品偷 |