2010-10-13 4 views
0

J'ai un programme exécutable en ligne de commande qui accepte un fichier de configuration car c'est un argument à lancer. le fichier de configuration ne contient que 2 lignes de code:Arguments de ligne de commande de diffusion?

#ConfigFile.cfg 
name=geoffrey 
city=montreal 

actuellement, le programme d'emballage que je construis pour ce programme exécutable de ligne de commande écrit le fichier de configuration sur le disque et que envoie ce fichier écrit comme argument pour lancer le programme sur la ligne de commande.

> myProgram.exe configFile.cfg 

est-il possible de lancer ces entrées dans le fichier de configuration que le fichier de configuration, me permettant de passer outre avoir à écrire le fichier de configuration sur le disque, mais encore permettre au programme de fonctionner comme si elle la lecture d'un fichier de configuration?

peut-être quelque chose comme ce qui suit:

> myProgram.exe configFile.cfg(name=geoffrey) configFile.cfg(city=montreal) 
+0

Si vous avez écrit l'application de la console, qu'est-ce qui vous empêche de le faire vous-même? (Je pense que je comprends la question, mais je ne suis pas sûr). – leppie

+0

Quel système d'exploitation, shell, etc? –

+0

Je n'ai pas écrit l'application console, et je n'ai pas accès au code, donc je ne peux pas le réécrire. J'utilise à la fois les lignes de commande Unix et Windows, car les mécanismes de lancement sont les mêmes. – TheDarkIn1978

Répondre

1

Si vous ne contrôlez pas la source du programme que vous emballage, et il ne fournit pas déjà une installation pour recevoir une entrée d'une autre manière, vous Je vais trouver ça difficile au mieux.

Une possibilité serait d'intercepter le fichier ouvert et d'accéder aux appels utilisés par le programme bien que ce soit une manière horrible de le faire.

Il serait probablement consisterait à injecter vos propres bibliothèques d'exécution contenant (C) fopen, fclose, fread et ainsi de suite, entre le programme et les bibliothèques réelles (telles que l'utilisation LD_LIBRARY_PATH ou quelque chose de similaire), et qui est en supposant qu'il n'est pas statiquement lié. Pas quelque chose pour les faibles de cœur. Si vous craignez que les personnes puissent voir votre fichier, il existe de nombreuses façons d'éviter cela, par exemple en le créant avec les permissions rwx------ dans un répertoire protégé similaire (en supposant un système d'exploitation de type UNIX). C'est probablement plus sûr que d'utiliser des arguments de ligne de commande que n'importe quel joker connecté pourrait trouver avec une commande ps.

Si vous ne voulez simplement pas avoir à créer un fichier, je pense que vous aurez l'embarras d'éviter que cela ne se passe beaucoup plus. En fonction de ce que vous êtes vraiment après, il ne faudrait pas beaucoup pour mettre en place un programme qui accepte les arguments, les a écrits dans un fichier temporaire, appelé vrai programme avec ce nom de fichier temporaire, puis supprimé le fichier.

Il serait toujours écrit sur le disque, mais ce ne serait plus la responsabilité de votre programme d'encapsulation. Quelque chose dans le sens de (un peu rude, mais vous devriez avoir l'idée):

#include <stdio.h> 
#define PROG "myProgram" 
int main (int argCount, char *argVal[]) { 
    char *tmpFSpec; 
    FILE *fHndl; 
    int i; 
    char *cmdBuff; 

    tmpFSpec = getTempFSpec(); // need to provide this. 

    cmdBuff = malloc (sizeof(PROG) + 1 + strlen (tmpFSpec) + 1); 
    if (cmdBuff == NULL) { 
     // handle error. 
     return 1; 
    } 

    fHndl = fopen (tmpFSpec, "w"); 
    if (fHndl == NULL) { 
     // handle error. 
     free (cmdBuff); 
     return 1; 
    } 

    for (i = 1; i < argCount; i++) 
     fprintf (fHndl, "%s\n", argVal[i]); 

    sprintf (cmdBuff, "%s %s", PROG, tmpFSpec); 
    system (cmdBuff); 

    return 0; 
} 
+0

lol. Je vais prendre votre mot pour cela et juste écrire le fichier de configuration pour éviter le mal de tête. – TheDarkIn1978

Questions connexes