系统中的Unix C代码cp()

时间:2010-02-17 06:27:06

标签: system cp

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

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

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

cp: cannot access g_acOutputLogName

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

您通常应该优先选择exec系列函数而不是系统函数。系统函数将命令传递给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");
  } 
}

答案 1 :(得分:1)

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

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

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