Den Fri, 07 Dec 2007 07:21:45 +0100 skrev Peter Jespersen:
> Arne Vajhøj wrote:
>
>> Peter Jespersen wrote:
>>> Jeg sidder her og nørkler lidt med et lille program, der egentlig burde
>>> være simpelt. Det drejer sig om en god gammeldags gang C og jeg benytter
>>> gcc version 4.2.1 under OpenSUSE 10.3
>>>
>>> Det jeg gerne vil er at kalde et eksternt program "text2gif" med et
>>> streng argument (char uptimeStr[MAXBUF]), indeholdende f.eks "-t \"Blah
>>> Blah\"
>>>> test.gif".
>>>
>>> Hvorledes gør jeg det nemmest ?
>>
>> Lav en samlet kommando linie med sprintf og kald funktionen system
>> med den den.
>>
>> Arne
>
> Tusind tak Arne
>
> Exec funktions familien drev mig til vanvid
system() er en del af C-standarden. Den supporterer kun lige præcis det
du har brug for, til gengæld er den simpel at bruge. På *nix kalder
den "sh -c" med de parametre du angiver, så selvom system() ikke
har support for at sætte noget i baggrunden, kan man bare skrive et
&-tegn, og lade shell'en gøre det.
exec() er en del af Unix / POSIX, og er kun en tredjedel af system().
De andre to dele hedder fork() og wait(). exec() alene vil stoppe
dit program, og erstatte det (overskrive i RAM) med det program
du forsøger at starte. Hvis det ikke er ønsket, skal den kombineres
med fork(), som starter en ny process, og kun i den nye process skal
man lave en exec(). Og hvis man ikke ønsker at programmerne skal
køre på samme tid, men ens program skal vente på det andet program
afslutter (fx. fordi man skal bruge outputtet fra det), skal den
oprindelige process derefter kalde wait() eller waitpid().
Mvh
Kent
--
"So there I was surrounded by all these scary creatures
They were even scarier than what Microsoft call features"
- C64Mafia: Forbidden Forest (Don't Go Walking Slow).