2010-02-17 6 views
0

J'ai un code C .. i que je code suivant pour UNIX:le code Unix C cp dans le système()

l_iRet = system("/bin/cp -p g_acOutputLogName g_acOutPutFilePath"); 

quand je courais les generated..I binaires AM obtenant l'erreur suivante :

cp: cannot access g_acOutputLogName 

Quelqu'un peut-il m'aider?

+1

Le message d'erreur est facile à comprendre. Vous devez peut-être spécifier le chemin d'accès complet du fichier 'g_acOutputLogName' ou exécuter votre programme à partir du bon répertoire. –

+2

pourquoi appelez-vous la commande système? vous pouvez utiliser une bibliothèque c pour copier des fichiers. – ghostdog74

Répondre

1

Vraisemblablement g_acOutputLogName et g_acOutPutFilePath sont char[] (ou char*) variables dans votre programme, plutôt que les chemins réels impliqués.

Vous devez utiliser les valeurs qui y sont stockées, plutôt que les noms de variables, par exemple:

char command[512];  
snprintf(command, sizeof command, "/bin/cp -p %s %s", 
      g_acOutputLogName, g_acOutPutFilePath); 
l_iRet = system(command); 
+0

Merci beaucoup .. C'était vraiment utile .. Merci encore –

2

Vous devriez généralement préférer la famille de fonctions exec sur la fonction du système. La fonction système transmet la commande au shell, ce qui signifie que vous devez vous soucier de l'injection de commande et de l'expansion accidentelle des paramètres. La façon d'appeler un sous-processus en utilisant exec est la suivante:

pid_t child; 
child = fork(); 
if (child == -1) { 
    perror("Could not fork"); 
    exit(EXIT_FAILURE); 
} else if (child == 0) { 
    execlp("/bin/cp", g_acOutputLogName, g_acOutPutFilePath, NULL); 
    perror("Could not exec"); 
    exit(EXIT_FAILURE); 
} else { 
    int childstatus; 
    if (waitpid(child, &childstatus, 0) == -1) { 
    perror("Wait failed"); 
    } 
    if (!(WIFEXITED(childstatus) && WEXITSTATUS(childstatus) == EXIT_SUCCESS)) { 
    printf("Copy failed\n"); 
    } 
} 
Questions connexes