0

我有一个 C 代码..我有以下 UNIX 代码:

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

当我运行生成的二进制文件时..我收到以下错误:

cp: cannot access g_acOutputLogName

谁能帮我吗?

4

2 回答 2

2

通常,您应该更喜欢 exec 系列函数而不是系统函数。system 函数将命令传递给 shell,这意味着您需要担心命令注入和意外的参数扩展。使用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");
  } 
}
于 2010-02-17T07:31:16.073 回答
1

大概g_acOutputLogNameandg_acOutPutFilePathchar[](或char*)程序中的变量,而不是所涉及的实际路径。

您需要使用其中存储的值,而不是变量名称,例如:

char command[512];    
snprintf( command, sizeof command, "/bin/cp -p %s %s", 
          g_acOutputLogName, g_acOutPutFilePath );
l_iRet = system( command );
于 2010-02-17T06:52:16.783 回答