Код Unix C cp в системе () - PullRequest
0 голосов
/ 17 февраля 2010

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

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

когда я запускаю сгенерированный двоичный файл .. Я получаю следующую ошибку:

cp: cannot access g_acOutputLogName

Кто-нибудь может мне помочь?

Ответы [ 2 ]

2 голосов
/ 17 февраля 2010

Обычно вы предпочитаете семейство функций 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");
  } 
}
1 голос
/ 17 февраля 2010

Предположительно 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 );
...