[완료] system()함수로 커맨드라인인수 스트링을 실행시키면 command not found 라고 나옵니다.
글쓴이: pr4nkst3r / 작성시간: 목, 2008/11/13 - 2:08오후
실행결과가 아래와 같이 명령어를 찾을수 없다고 나옵니다. ps외에 다른 명령어도 명령어를 찾을수없다고 나옵니다. 쉘상태에서 ps와 다른 명령어 모두 제대로 실행됩니다.
아래와 같이 에러가 나는 이유를 자세히 설명해주세요.
실행 : a.out ps -au
실형결과 : Running ps with system
sh:line1:V@ps:command not found
Done
세그멘테이션 오류
-----------------------------------source------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main(int argc, char *argv[])
{
char *str;
int i=1;
printf("Running %s with system\n", argv[1]);
/* 명령라인의 인수들을 연결해서 str에 저장 */
while(argc > i) {
strcat(str, argv[i++]);
strcat(str, " ");
}
/* sysstem을 이용해 str에 저장된 명령어 실행 */
system(str);
printf("Done\n");
exit(0);
}
Forums:
경로 문제 아닐까요?
ps 명령의 전체 경로 명을 적으시면 될 거 같은데...
http://sebul.sarang.net/
세벌 https://sebuls.blogspot.kr/
전체경로명 적어도 안됩니다.
ps명령어의 전체 경로명인 /bin/ps 해도 command not found 라고 나옵니다.
어....
1) system(argv[1])은 되나요?
2) strcat의 경우 미리 메모리가 할당되어있어야 하는것 같습니다. 또한, str은 초기화가 안 되어있지요.
printf("%s", str); 을 해보세요.
문제를 해결하려면 미리 적절한 공간을 calloc 해주고 해줘야 할것 같네요. 돌아간게 다행인것 같습니다.
...아, 세그폴났네효.
--
from bzImage
It's blue paper
from bzImage
It's blue paper
system(argv[1]) 하면 됩니다.
system(argv[1]) 하면 됩니다. 그런데 세그멘테이션 오류가 여전히 뜹니다.
printf("str : %s\n",str); 을 소스에 삽입하면 아래와 같이 출력됩니다.
( a.out ps 를 실행했을경우)
str : V@ps
여기서 V@ 은 무엇을 뜻하는 겁니까? ㅋ
.
쓰레기 값 아닐까요.
str은 그냥 포인터이고 애초에 문자(열)를/을 저장할 공간은 없잖아요...
여기를 읽어보시면
라고 하죠. man을 생활화 하심이...
메모리 할당 & 초기화
----
내 블로그: http://unipro.tistory.com
내 블로그: http://unipro.tistory.com
str =
str = (char*)malloc(sizeof(char)*100); <== 포인터에 메모리 할당.
while(argc>1)
{
~~ 생략 ~~
galien 님 말씀대로 메모리 할당해 주시면 해결됩니다.
ps 명령은 path가 걸려있으니 절대경로로 하실필요는 없구요.
댓글 달기