I forbindelse med et projekt på skolen er jeg stødt på et lille problem med
et program, som jeg skal have kørt fra en Java VM. Problemet består i at
jeg ikke kan få at vide, hvordan den Java klasse (som er min grænseflade
til programmet, der er en binær eksekverbar fætter skrevet i Haskell) tager
argumenter med til programmet.
Derfor vil jeg gerne lave et lillebitte C program, som starter det rigtige
program men samtidig giver det et prædefineret argument med. Jeg har fusket
noget sammen her, som næsten virker:
---
#include <stdio.h>
#include <strings.h>
#include <errno.h>
#include <unistd.h>
#define QUIPEXE "/usr/local/bin/quip"
#define QUIPHOME "-home /tmp/xmlbibdata/data"
#define QUIPUNWRAP "-unwrapped_result"
int main(int argc, char *argv[], char *envp[]) {
execve( QUIPEXE, argv, envp );
}
---
Dette starter /usr/local/bin/quip med samme argumenter som jeg giver med fra
shell'en, så mangler jeg bare at knalde QUIPHOME og QUIPUNWRAP ind som de
første argumenter.
Kan nogen hjælpe mig med det?
Jeg ville gerne gøre det selv, men jeg har aldrig skrevet andet end Hello.c,
og kan heller ikke overskue at begrave mig (yderligere) i man siderne for
execv-familien af systemkald...
--
Mvh
Kenneth
PS: Hvis det er uklart hvad jeg vil, så :
Hvis det var et Java program ville jeg lave en ny char[] newargv, og
indsætte mine argumenter først, derefter fylde efter med indholdet af
argv[], derefter argv[]=newargv[] og så køre videre...
Alternativt kunne jeg lave et alias quipp='/usr/local/bin/quip
-unwrapped_result -home /tmp/xmlbibdata/data' og bruge den som jeg ellers
ville bruge quip programmet normalt, men nu skal jeg eksekvere det fra et
program og ikke fra shell'en, så jeg er lidt fortabt...