전체 경로가 있는 파일을 복사하고 execl을 사용하여 C 프로그램에서 이름을 바꾸는 방법은 무엇입니까? 이 지시문을 사용할 수 있습니까?
execl("/bin/cat","cat",path_source,">",path_destination,NULL);
답변1
게시한 코드는 다음 셸 명령을 모방하도록 설계된 것 같습니다.
cat path_source >path_destination
그러나 이 경우에는 ; 인수가 >
아닙니다 . 대신 단일 인수로 실행되고 표준 출력이 연결되는
cat
쉘에 의해 해석됩니다 . (그래서 C 코드는 .)cat
path_source
path_destination
cat path_source '>' path_destination
위 명령을 모방하는 한 가지 방법 cat
은 쉘 명령( )이 포함된 문자열을 구성한 "cat ... >..."
다음 exec를 사용하여 이를 매개변수로 전달하는 것입니다 /bin/sh -c
. 그러나 얼마나 신뢰할 수 있고 안전한지 모르면 이를 신뢰할 수 있고 안전하게 만들기가 어렵습니다. 파일 이름이 특정 제약 조건에 대해 유효성을 검사하는지 확인하세요.
파일 이름만 바꾸려면 의 표준 기능을 사용하는 것이 rename
좋습니다 stdio.h
. 그렇지 않은 경우 질문을 명확히하십시오.
답변2
이것은 숙제처럼 들리므로 의도적으로 모호하게 말하고 있습니다.
출력 리디렉션 연산자를 사용할 때 쉘의 동작을 모방하는 것이 요구 사항인 것 같습니다. execl()
호출 프로세스의 표준 출력이 대상 출력 파일의 열린 파일 설명자가 되도록 호출하기 전에 표준 파일 설명자를 조작해야 합니다 . 이렇게 하면 cat이 표준 출력에 쓸 때 내용이 대상 파일로 이동됩니다.