从C到Shell:关于“系统”指令

时间:2011-12-15 15:26:26

标签: c shell

我正在尝试将一些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

1 个答案:

答案 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