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
この例では、 'cd'はftpクライアントによって実行されます。この例に適したソリューションは、次のようになります。 '(echo" cd $ icmd "; echo $ ftpcmd; echo" quit ")| ftp -v $ ipaddress >> $ out_fname' –
@EdwardThomson:ありがとう、ありがとう。これを答えに編集しました。 – thiton