2011-12-15 4 views
0

C/C++コードをUNIXシェルに変換しようとしています。私はいくつかの変換を行っていますが、時にはC/C++のコードが奇妙です。さらに、クライアントは入出力ファイルやドキュメンテーションを私に渡さなかったので、UNIXでのコーディングは難しいです。Cからシェルへ: "システム"命令について

私はこれを得た:

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; 

} 

私はコマンドをたくさん持っているファイルから読み込むことを考えて、彼らがOKかどうかを確認するために、「システム」とそれをテスト? UNIXで同じことをexecとすればいいですか?

私はhereを読んでいます。システムにはいくつかの危険があります。この文脈で使用するのは安全ですか?

と同等のものがありますか?私はそれを使うべきですか?よりエレガントな方法がありますか?最初の引数で

[email protected]/narcredit/vcfid>cat ftp_exe.cmd 
dir /apps/VB/A01862.txt ftp_dir.cmd 

答えて

1

コマンドは、FTPにより実行され、その結果を出力ファイルに追加:

EDIT Iはftp_exe.cmdのミニ例を発見しました。この文脈ではmoreの使用は奇妙です。シェルの単一ラインが十分であるべきである:最初の引数に入力とSTDIN上に与えられた適切なCD /ユーザコマンドで

ftp -v $IP_SERVER >> ftp_exe.out 

。これは、次のようになります。

(echo "cd $icmd"; echo $ftpcmd; echo "quit") | ftp -v $ipaddress >> ftp_exe.out 
+0

この例では、 'cd'はftpクライアントによって実行されます。この例に適したソリューションは、次のようになります。 '(echo" cd $ icmd "; echo $ ftpcmd; echo" quit ")| ftp -v $ ipaddress >> $ out_fname' –

+0

@EdwardThomson:ありがとう、ありがとう。これを答えに編集しました。 – thiton

関連する問題