Ce-cko - veci kolem presmerovani a zvuku.
Ivo Zacek
izacek na brno.bohem-net.cz
Úterý Březen 24 20:46:22 CET 1998
Nathan L. Cutler wrote:
>
> On Mon, Mar 23, 1998 at 08:42:12AM +0100, Roman Vesely wrote:
> >
> > Jak psat procesu, ktery spustim volanim jadra exec(), na jeho STDIN ?
>
> Nespoustet pres exec, nybrz pres popen(). Pak staci fprintf na vznikly file
> pointer.
>
To je opravdu nejjednodussi, pokud nam nevadi, ze nejsme
POSIX-compliant. Jinak to jde udelat i pomoci exec atd., trochu
sloziteji, ale portabilneji. Abych naprazdno nezvanil, pripojuji kousek
sveho programu. Je mirne upraveny, abych nemusel vysvetlovat co delaji
ruzne dalsi funkce, volane v originale. Tak mi tolerujte pripadny
preklep. Jde o tisk pres lpr:
FILE * handle;
int pip[2];
pid_t child;
if (pipe(pip) != 0) {
NecoJeBlbe();
}
child = fork();
if (child < 0) {
NecoJeBlbe();
}
if (child == 0) {
close(STDIN_FILENO);
if (dup(pip[0]) != STDIN_FILENO) {
NecoJeBlbe();
}
close(pip[0]);
close(pip[1]);
execl("/bin/lpr", "lpr", (const char *)NULL);
NecoJeBlbe();
}
handle = fdopen(pip[1], "w");
close(pip[0]);
... a v pohode piseme na handle.
Rekl bych, ze popen() je nejak podobne implementovane.
--
Ivo Zacek <izacek na brno.bohem-net.cz>, Supervisory Systems s.r.o. Brno
Nejspravedliveji rozdelenou veci je rozum:
nikdo si nestezuje, ze ho ma malo.
Další informace o konferenci Linux