[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [PROGRAMMERING] C rutine til exec + pipe til og fra



On Wed, 12 May 2004 11:15:38 +0200, Holger Bille wrote:
> Er der en af jer, der har en _elegant_ ansi C rutine til at lave en exec
> af et eksternt program, hvor man give et dataområde til stdin og få
> udfyldt to dataområder til hhv stdout og stderr???

Det kan, så vidt jeg ved, ikke gøres i ren ANSI C. Det kan gøres med
POSIX udvidelserne.

> Jeg har selv lavet nedenstående som jeg tror vil lave deadlock hvis ikke
> system-pipes er store nok til at rumme data til de 3 data strømme.

Ja, du vil få deadlocks. Du har tre (fire) muligheder:

1. Vær selv forfatteren af det eksterne program du prøver at styre, og
gør dets stdout unbuffered. Som du selv skriver har du dog stadig
problemer med at system pipes'ne ikke altid er store nok, og det bliver du
nødt til at løse ved at lave buffering i dit eget program og loope
omkring select() eller poll(). Denne løsning er næppe besværet værd.

2. fork() dit eget program 2 eller 3 gange så du ender med at have én
proces der skriver data til det eksterne programs stdin og 1 eller 2
processer der læser fra dets stdout/stderr. Denne løsning er klart at
foretrække hvis den data du skal skrive til stdin ikke afhænger af hvad
programmet skriver på stdout.

3. Brug expect(1) eller libexpect(3).

4. Fortæl lidt mere om hvad dit praktiske problem er, måske kan det
løses mere elegant end disse hacks.


 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 22:43 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *