我有一个 C 代码..我有以下 UNIX 代码:
l_iRet = system( "/bin/cp -p g_acOutputLogName g_acOutPutFilePath");
当我运行生成的二进制文件时..我收到以下错误:
cp: cannot access g_acOutputLogName
谁能帮我吗?
通常,您应该更喜欢 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");
}
}
大概g_acOutputLogName
andg_acOutPutFilePath
是char[]
(或char*
)程序中的变量,而不是所涉及的实际路径。
您需要使用其中存储的值,而不是变量名称,例如:
char command[512];
snprintf( command, sizeof command, "/bin/cp -p %s %s",
g_acOutputLogName, g_acOutPutFilePath );
l_iRet = system( command );