Kihagyás

Dobodz ötödik gyakorlata

Órai anyag

  • STDIN
  • STDOUT
  • C
  • BASH
  • TERMINAL
  • SHELL
  • Linux System call
  • int fd = open("...")
  • ls | wc -l
  • ls > a.txt

Bash-Terminal-Shell különbség

  • A Bash az egy fajta shell

Linux System Call

  • Minden az operációs rendszer felé irányult kérés

Terminal

  • Egy command prompt
  • A terminál a shell i/o-ját valósítja meg

Stdin/Stdout

  • Standard input, standard output

Pipe

  • egy standard out-ot és egy standard in-t összeköt

Mai óra: Pipe

Pipe

Program indításkor létrejön a /proc/<pid> mappa

FD: File Descriptor - egy szám

Minden alkalmazás by default kap fd-ket

  • 0: stdin
  • 1: stdout
  • 2: stderr

Pipe: a | b

  • elindítja a-t és b-t
  • az a 1-es file descriptorát belevezeti a b 0-s file descriptorába

Hozzunk magunk létre pipeot

mkfifo

1: mkfifo my_pipex
2: echo "Hello World" > my_pipe
1: cat < my_pipe
Hello World

Warning

Meg kell nyitni mindkét oldalát, hogy tovább menjen!

( echo "5 hello" 1>&9 ) 9>&1 > cat

Meg lehet adni, hogy melyik pipe-ból melyik pipe-ba akarjuk rakni az elemeket 5 hello az első fd-ből a 9.-be, majd a 9.-ből az elsőbe a cat felé

tee

Az adatfolyamot ki tudja írni egy fileban

pl

echo "asd" | tee a.txt | cat

kiírja, hogy "asd" és beleírja az a.txt fileba is

pipe()

C-ben tudunk létrehozni pipe-ot. Kapunk fd-t, amit pl. a forkolt gyerekkel együtt tudunk használni.

Probléma: Hogyan szinkronizáljuk az írást és az olvasást???

következő óra: poll