2010-02-17 3 views
0

У меня есть код C .. я, который я следующий код для UNIX:Unix C код сП в системе()

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

, когда я бегу двоичных generated..I я получаю следующее сообщение об ошибке :

cp: cannot access g_acOutputLogName 

Может ли кто-нибудь помочь мне?

+1

Сообщение об ошибке легко понять. Возможно, вам нужно указать полное имя пути файла 'g_acOutputLogName' или запустить вашу программу из правильного каталога. –

+2

Почему вы вызываете системную команду? вы можете использовать библиотеку c для копирования файлов. – ghostdog74

ответ

1

Предположительно g_acOutputLogName и g_acOutPutFilePath являются char[] (или char*) переменные в вашей программе, а не реальных путей, вовлеченных.

Вы должны использовать значение, хранящееся в нем, а не именах переменных, например:

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

Спасибо большое .. Было действительно полезно .. Еще раз спасибо – 2010-02-17 07:30:22

2

Вы вообще должны предпочесть EXEC семейство функций над системной функцией. Системная функция передает команду в оболочку, что означает, что вам нужно беспокоиться о вводе команд и случайном расширении параметров. Способ вызова подпроцесса с использованием exec выглядит следующим образом:

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"); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^