我正在尝试将一些C / C ++代码转换为UNIX shell。我有些转换,但有时,我发现C / C ++中的代码很奇怪,可能是因为我在上下文中不理解它。更重要的是,客户端没有给我输入/输出文件或文档,因此在UNIX中进行编码非常困难。
我明白了:
int exec_ftpcmd(char *ftpcmd, char *IP_Server, char* icmd)
{
int cmd_st = 0;
FILE *cmd_file;
char *cmd_fname = "ftp_exe.cmd",
*out_fname = "ftp_exe.out",
cmd[100];
printf("ftp_serv: exec_ftpcmd [%s][%s] \n",icmd,ftpcmd);
cmd_file = fopen(cmd_fname,"w");
#ifndef UNIX
fprintf(cmd_file,"user test test1\n"); //just for dos
#endif
if (strlen(icmd)>0)
fprintf(cmd_file,"cd %s\n",icmd);
fprintf(cmd_file,"%s\n",ftpcmd);
fprintf(cmd_file,"quit ");
fclose(cmd_file);
memset(cmd,0,sizeof(cmd));
#ifdef UNIX
sprintf(cmd,"more %s | ftp -v %s >> %s",cmd_fname,IP_Server,out_fname); //unix
#else
sprintf(cmd,"ftp -n -s:%s %s >> %s",cmd_fname,IP_Server,out_fname); //dos
#endif
cmd_st = system(cmd);
return cmd_st;
}
我认为我从一个包含大量命令的文件中读取,并使用“system”进行测试,看看它们是否正常?我可以在UNIX中使用 exec 吗?
我看了here 系统有一些危险。在这种情况下使用它是安全的吗?
那么,哪一个是系统的良好等价?我应该用吗?有更优雅的方式吗?
修改 我找到了一个 ftp_exe.cmd 的小例子:
ever@/narcredit/vcfid>cat ftp_exe.cmd
dir /apps/VB/A01862.txt ftp_dir.cmd
答案 0 :(得分:1)
第一个参数中的命令由ftp执行,结果附加到输出文件。在这种情况下,使用more
很奇怪。单行shell就足够了:
ftp -v $IP_SERVER >> ftp_exe.out
使用第一个参数中的输入和通过stdin给出的适当的cd / user命令。在整行中,这可能看起来像:
( echo "cd $icmd"; echo $ftpcmd; echo "quit") | ftp -v $ipaddress >> ftp_exe.out