Popen 질문입니다

fp = popen("ls", "r");
fp = popen("cd data", "r");
fp = popen("ls", "r");

root 에서 위의명령을 수행하면
root 의리스트가 출력되고
그다음 현재폴더를바꾸고 다시 ls 를해도
root 의리스트가 출력됩니다

cd 명령후 바뀐디렉토리내에서 ls 명령이 적용되게하려면
어떻게하면되나요?

chdir 함수를 쓰면 현재 디렉토리를 변경할 수 있습니다.

[code:1w29qvio]
fp = popen("ls", "r");
chdir("data");
fp = popen("ls", "r");
[/code:1w29qvio]

[code:200lfzuy] fp = popen("su", "r");
if(chdir("sdcard") == -1){
perror("error: ");
}
fp = popen("ls", "r");[/code:200lfzuy]
이건되는데

[code:200lfzuy] fp = popen("su", "r");
if(chdir("data") == -1){
perror("error: ");
}
fp = popen("ls", "r");[/code:200lfzuy]
이건 안됩니다
fp = popen("su", "r");
이명령수행시
슈퍼유저권한을 획득했다는 메세지가 나옵니다
근데 data 에는 안들어가집니다

popen 함수의 용도를 잘못 이해하고 계신듯 합니다.

popen 함수는 새로운 프로세스를 생성하고 그 프로세스와 파이프 통신을 하기 위해 사용하는 함수입니다.

popen 함수로 'cd’나 ‘su’ 같은 명령어를 실행해도 그 명령어는 새로운 프로세스에서 실행되기 때문에 현재 프로세스에는 아무런 변화가 없습니다.

아~ 그런가요
그럼 c 프로그래밍으로 작업폴더 바꿔서
바뀐작업폴더에서 리눅스 명령어실행하는방법은 없는건가여?

자바에서 시도하다가
c 로는될까싶어서 함 해봤는데
무지 헤멥니다

보통 system 함수를 쓰지 않나요?

멀 그리 어렵게 생각합니까?
어자피 sh -c 로 실행된다고 보면…

fp=popen("cd /etc;ls","r");
fp=popen("(cd /etc;ls)|sort -r","r");

머 이런식으로 실행할 수 있습니다.