piping forking dup2'ing and in the end shooting the pc
V13
v13 at priest.com
Tue Apr 6 17:40:20 EEST 2004
On Tuesday 04 May 2004 14:53, Nikos Kouremenos wrote:
> αυτός ο κώδικας: http://nk.unstable.nl/final.c.html
>
> έχει γραψεί αυτόν τον κώδικα: http://nk.unstable.nl/final.c.html
> με σκοπό να εξομοιώσει το:
> cat file | gzip -c > file.gz
>
>
>
> όμως κάπου προς το τέλος μου τα χαλάει.
> παρότι έχω κάνει νομίζω σωστά χρήση των dup2 τελικά παράγονται broken
> .gz και λίγο crappy output στην κονσόλα
a) To gzip thes na to trekseis mono mia fora kai oxi toses osa read kaneis,
opote mporeis na ksyloseis olo to while() loop toy child process kai na to
antikatastiseis me to:
execl("/bin/gzip","gzip", "-fc", NULL);
(hint, meta apo kati tetoio kalo einai na kaneis exit() oste an apotyxei to
exec na min synexisei to prog ston ypoloipo kodika.
b) To gzip tha grapsei sto stdout, diladi sto fd #1. Esy les:
dup2(1, fd_out)
to opoio den exei kanena apolytos noima. Ayto poy theleis einai:
dup2(fd_out, 1)
oste na klisei to palio stdout kai na to balei to fd_out na einai kai to fd#1
kanontas tis parapano alages moy doylepse gia 50K keimeno.
c) Ta bytes tha prepei na ta metras sto parent process kai oxi sto child giati
akoma kai an ta metriseis (pragma adynato mias kai kaneis exec() h opoia
antikathista pliros to process) den tha mporeseis na ta emfaniseis h na ta
stileis sto parent. O poio eykolos tropos tha itan na kaneis ena stat() to
arxeio oste na deis to teliko toy megethos.
d) Mipos ayto poy theleis na kaneis einai aplos to 'gzip -v koko' ?
> ΥΓ. έχω κάνει και ένα implementation με popen άλλα αυτή είναι πολύ
> high-level και δεν μπορώ να μετρήσω τα bytes που βγάζει το gzip [εκτός
> αν κοιτάξω το filesize του fileout.gz που όμως κάτι τέτοιο δεν θέλω]
To mono problima poy exei h popen() einai oti mporeis na exeis mono read h
mono write alla oxi kai ta dyo. Ta bytes stin popen() mporeis na ta metriseis
metrontas ayta poy perneis apo tin read() (an exeis read).
<<V13>>
More information about the Linux-greek-users
mailing list