execl() 함수에서 cat을 사용하여 파일 복사

execl() 함수에서 cat을 사용하여 파일 복사

전체 경로가 있는 파일을 복사하고 execl을 사용하여 C 프로그램에서 이름을 바꾸는 방법은 무엇입니까? 이 지시문을 사용할 수 있습니까?

execl("/bin/cat","cat",path_source,">",path_destination,NULL);

답변1

게시한 코드는 다음 셸 명령을 모방하도록 설계된 것 같습니다.

cat path_source >path_destination

그러나 이 경우에는 ; 인수가 >아닙니다 . 대신 단일 인수로 실행되고 표준 출력이 연결되는 cat쉘에 의해 해석됩니다 . (그래서 C 코드는 .)catpath_sourcepath_destinationcat path_source '>' path_destination

위 명령을 모방하는 한 가지 방법 cat은 쉘 명령( )이 포함된 문자열을 구성한 "cat ... >..."다음 exec를 사용하여 이를 매개변수로 전달하는 것입니다 /bin/sh -c. 그러나 얼마나 신뢰할 수 있고 안전한지 모르면 이를 신뢰할 수 있고 안전하게 만들기가 어렵습니다. 파일 이름이 특정 제약 조건에 대해 유효성을 검사하는지 확인하세요.

파일 이름만 바꾸려면 의 표준 기능을 사용하는 것이 rename좋습니다 stdio.h. 그렇지 않은 경우 질문을 명확히하십시오.

답변2

이것은 숙제처럼 들리므로 의도적으로 모호하게 말하고 있습니다.

출력 리디렉션 연산자를 사용할 때 쉘의 동작을 모방하는 것이 요구 사항인 것 같습니다. execl()호출 프로세스의 표준 출력이 대상 출력 파일의 열린 파일 설명자가 되도록 호출하기 전에 표준 파일 설명자를 조작해야 합니다 . 이렇게 하면 cat이 표준 출력에 쓸 때 내용이 대상 파일로 이동됩니다.

관련 정보