GNU/Linux >> Znalost Linux >  >> Linux

Účel použití Fifo vs dočasný soubor nebo potrubí?

Od APUE

FIFO lze použít k duplikování výstupního proudu v sérii příkazů shell
. To zabrání zápisu dat na mezilehlý disk
soubor
(podobné použití potrubí, aby se zabránilo přechodným diskovým souborům).

Ale zatímco potrubí lze použít pouze pro lineární spojení
mezi procesy, FIFO má název, takže jej lze použít pro
nelineární spojení .

Zvažte proceduru, která potřebuje zpracovat filtrovaný vstupní
stream dvakrát.

mkfifo fifo1
prog3 < fifo1 &
prog1 < infile | tee fifo1 | prog2

Vytvoříme FIFO a poté spustíme prog3 na pozadí, čteme
z FIFO. Poté spustíme prog1 a pomocí tee odešleme jeho vstup
jak do FIFO, tak do prog2.

  1. Jak FIFO „duplikuje výstupní proud v sérii příkazů shellu“? Nedělá to tee? místo FIFO?

  2. V příkladu mkfifo fifo1 vytvoří soubor v aktuálním adresáři a fifo1 zdá se nahraditelný běžným souborem . Jaký je tedy smysl FIFO „zabránit zápisu dat na přechodný diskový soubor“?

  3. Co znamenají „lineární spojení“ a „nelineární spojení“ mezi procesy? Co to znamená, že FIFO lze použít pro nelineární spojení, zatímco potrubí lze použít pouze pro lineární spojení mezi procesy?

Děkuji.

Přijatá odpověď:

  1. APUE říká:„FIFO lze použít duplikovat výstupní tok“, neříká, že FIFO ve skutečnosti duplikují výstupní tok. Jak jste uvedl, duplikaci provádí tee v příkladu.

  2. mkfifo vytvoří FIFO, který je viditelný jako „soubor“ v obsahujícím adresáři; ale zápis do FIFO není jako zápis do souboru, protože data se nikdy nedostanou na disk. Trubky, pojmenované nebo jinak, neposkytují úložiště pro data, poskytují komunikační kanály; zapisovací konec roury nemůže zapisovat data, pokud neexistuje žádný přijímač, roura pouze předává data dál, aniž by je ukládala. (Na většině systémů potrubí jsou podporováno malými vyrovnávací paměti jádra, aby se zlepšil výkon, ale to je detail implementace.)

  3. Lineární spojení mezi procesy jsou potrubí, které lze znázornit jako lineární graf. V příkladu můžete poslední řádek reprezentovat jako

    infile → prog1 → tee fifo1 → prog3
    

    který je lineární, ale pokud se pokusíte znázornit celý řetězec, redukovaný na prvky zpracování, potřebujete

    infile → prog1 → prog2
                   → prog3
    

    který je nelineární (v grafu je jeden uzel, prog1 , který má dva výstupní uzly).

Související:Jak vytvořit nové okno v aktuálním adresáři v tmux?
Linux
  1. Jak extrahovat soubor tar.gz v Linuxu pomocí příkazového řádku

  2. Používání Disku Google z příkazového řádku systému Linux

  3. 4 nástroje ke stažení libovolného souboru pomocí příkazového řádku v Linuxu

  1. Jaký je účel souboru .bashrc v Linuxu

  2. Jak vložím text do 1. řádku souboru pomocí sed?

  3. Musí potrubí zapisovat dočasný soubor?

  1. Kopírování souboru pouze v případě, že je novější než cíl

  2. Jak otevřít soubor ve vim pomocí pipe

  3. Jak změnit kódování, které používá můj SFTP server?