跳轉到內容

Aros/開發人員/文件/處理程式/管道

來自華夏公益教科書,開放的書籍,面向開放的世界
用於 Aros 華夏公益教科書的導航欄
Aros 使用者
Aros 使用者文件
Aros 使用者常見問題
Aros 使用者應用程式
Aros 使用者 DOS Shell
Aros/使用者/AmigaLegacy
Aros 開發文件
Aros 開發人員文件
從 AmigaOS/SDL 移植軟體
面向 Zune 初學者
Zune .MUI 類
面向 SDL 初學者
Aros 開發人員構建系統
特定平臺
Aros x86 完整系統 HCL
Aros x86 音訊/影片支援
Aros x86 網路支援
Aros Intel AMD x86 安裝
Aros 儲存支援 IDE SATA 等
Aros Poseidon USB 支援
x86-64 支援
Motorola 68k Amiga 支援
Linux 和 FreeBSD 支援
Windows Mingw 和 MacOSX 支援
Android 支援
Arm Raspberry Pi 支援
PPC Power Architecture
其他
Aros 公共許可證

管道處理程式是一個命名管道處理程式,而不是像原始管道處理程式那樣是匿名管道。您可以在原始管道處理程式中建立 PIPE:mypipe 嗎?我不記得了。閱讀 這裡,似乎您確實可以建立命名管道。

現在,出於一致性原因,開啟 PIPEFS: 用於讀寫會導致錯誤,因為 PIPEFS: 是一個目錄並被視為目錄。可以將此作為特殊情況處理,因此我們將 PIPE: 賦給 PIPEFS:。或者,PIPEFS: 可以包含一個名為 __systempipe__ 的特殊目錄,該目錄的作用類似於原始 PIPE:,還可以指定其他引數 bufsize 和 bufnum(目前忽略它們,也許可以)。

您可以在我們的 PIPEFS: 中建立檔案,每個檔案都像一個標準管道。事實上,它與原始 PIPE: 相同,只有一點不同 - 您不能開啟沒有名稱的檔案(僅僅是 PIPE:)。在原始處理程式中,空名稱也是名稱。為了實現 PIPE:,我們只是將 PIPE: 賦給啟動時建立的某個命名管道,即“systempipe”。是的,但這很冗餘。事實上,上面應該修正,PIPEFS: 可以改名為 PIPE:。“您必須在 PIPE: 之後提供一個名稱,例如檔名”。(DOS 手冊)。顯然,使用空名稱是一個“意外功能”。好的,我們可能也想模仿它,如果可以的話,但我們似乎已經符合規範。如果我們將其實現為一個真正的檔案系統,那麼我們會遇到 PIPE:// 這樣的名稱問題,但原始檔案系統也是如此。好的,因此如果我們假設檔名約定成立,那麼快速修復方法是在每個檔名之前新增一個 p 嗎?這是否會減少名稱的限制?好吧,以下對映到真實檔案系統可能有效,我認為

pipedir
--unnamed
--nameddir
----<name1>
----<name2>

當然,將 PIPE: 作為賦值會帶來額外的靈活性,但也可能帶來額外的錯誤風險。

實際上,您必須在 PIPE: 中建立一個檔名,這就是連結的建立方式,透過讓一個程序寫入 PIPE:samename 並讓另一個程序從 PIPE:samename 讀取。我曾經認為,由於管道本身就是命名的,為什麼不允許使用者在需要的情況下允許多個讀取器和/或寫入器呢?但我從未嘗試過,我相信一些替代方案確實實現了類似的東西。匿名管道是 Pip 命令,我認為,不過我認為匿名管道應該是一個 Shell 函式。

在當前實現中,我們不能引用像 PIPE:Some/Path/Name 這樣的東西。我們只能使用 PIPE:。在原始管道處理程式中,當您開啟某個新名稱以進行寫入時,管道會自動建立。空名稱在那裡也是有效的。另外,還要注意自定義 FSA_PIPE 和新的 Pipe() dos.library 函式。我認為它們是一個糟糕的解決方案。為什麼某個神奇名稱(比如 $UNNAMED$)不好?DupLock() 然後可以拆分管道的兩個端點。$UNMAMED$ 在建立使用 popen() 和類似函式的管道的目的方面被不同地對待:它為您返回一個管道處理程式,但不建立管道 fs 中的檔案,因此任何其他開啟 $UNNAMED$ 的操作都會開啟一個新的管道,就像 popen() 所期望的那樣。popen() 當前使用自定義資料包。好吧,有人改變了它。 ;-) 我認為這是一個可疑的選擇。我傾向於避免使用神奇名稱。您永遠不知道誰會出於某種原因將它們用作普通名稱。也許將其對映為

pipedir
--unnamed
--nameddir
----<name1>
----<name2>
--popendir
----<howeverthesework>
?

或者我們無法以這種方式將 popen-ed 管道連結到檔案嗎?

剛注意到為這個場合實現了一個全新的管道處理程式。我想知道:為什麼呢?

在當前實現中,我們不能引用像 PIPE:Some/Path/Name 這樣的東西。我們只能使用 PIPE:。在原始管道處理程式中,當您開啟某個新名稱以進行寫入時,管道會自動建立。空名稱在那裡也是有效的。

另外,還要注意自定義 FSA_PIPE 和新的 Pipe() dos.library 函式。我認為它們是一個糟糕的解決方案。為什麼某個神奇名稱(比如 $UNNAMED$)不好?DupLock() 然後可以拆分管道的兩個端點。

您可以在原始管道處理程式中建立 PIPE:mypipe 嗎?

是的,您可以在。甚至 PIPE:Sub/mypipe。

參考文獻

[編輯 | 編輯原始碼]
華夏公益教科書