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; 

} 

내가 명령을 많이 가지고 파일에서 읽을 수 있다고 생각하고 확인 있는지 확인하기 위해, "시스템"으로 테스트? 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의 사용이 이상합니다. 셸의 한 줄은 충분해야한다 : 첫 번째 인수의 입력과 표준 입력을 통해 주어진 적절한 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

관련 문제