Execve 함수를 이용해 입력받은 문자열을(ex) /bib/ls) 실행하는 프로그램을 짜보았습니다.
글쓴이: olsson77 / 작성시간: 목, 2017/04/27 - 12:22오후
#include <stdio.h> #include< unistd.h> Int main(){ char str[]; char*b[]; Char *temp; int i; printf("command< "); gets(str); temp=strtok(str," "); b[0]=temp; for(i=1; i<5;i++){ temp=strtok(NULL," "); If(temp=NULL){ break; } b[i]=temp; Char *a[100]; int j,k for(j=0,i=0; ;j++,i++){ /*b[i]의 끝에서 if문 실행하려는데 어디가 끝인지 잘 모르겠습니다.*/ If(b[i]=NULL){ a[j]=o break; } a[j]=b[i]; } execve(a[0],a,0); }
혹시 잘 못된 부분이나 수정해야 할 부분이 있을까요?
Forums:
code 태그로 소스를 감싸 주세요.
code 태그로 소스를 감싸 주세요.
세벌 https://sebuls.blogspot.kr/
개발자라면 본인이 짠 프로그램의 기본적인 테스트를 할
개발자라면 본인이 짠 프로그램의 기본적인 테스트를 할 줄 아는 것도 하나의 덕목입니다.
프로그램은 입력이 있으면 출력이 있기 마련입니다.
본인이 짠 프로그램에 어떤 입력을 주면 어떤 출력이 나와야할지를 먼저 정의하세요.
그리고 모든 입력 가능한 값의 조합을 나열한 다음에 그 조합의 출력이 뭔지 적어보세요.
아마 수개 또는 수십개가 나올수도 있습니다.
그걸 모두 프로그램에 입력하고 적어놨던 출력이 나오는지 확인해보세요.
그러면 프로그램이 정상적인지 아닌지 검증 가능합니다.
물론 입력값이 거의 무한대 조합이거나 사람이 도저히 손으로 만들수 없는 조합일수도 있습니다.
그러면 그 조합을 만드는 프로그램을 만들어보세요.
그것도 힘들다면 테스트용 입력을 만드는 방법은 아래 정도로 만들면 어느정도 커버는 됩니다.
1. 정상적인 입력 범위 값
2. 입력 값의 가장자리 값. 즉, 1~10까지 입력을 줄수 있을때 1과 10이 포함되는 입력값
3. 수천개 정도의 랜덤한 입력값. 단순 패턴을 만든 다음에 메모장에 c&p로 생성하면 됩니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
실행이 안되더라구요
과제라서 나름 짜봤는데 잘못된 부분을 못찾겠어서 도움이라도 구해볼까 올려보았습니다
처음에는 tokenize 하지 않고 gets를 이용해 받은 것을 그대로 넣어주었으나 이러면 안된다는 것을 알고 tokenize하여 넣어주어야 겠다는
생각까지는 하게되었는데 실행이 안되서 여쭈어보려고 올린 글입니다.
/bin/ls 를 입력하면 ls처럼 작동하게끔 짜는게 목표고요
무튼 답변 감사합니다
C언어를 이용하고 계신 게 맞나요?
C언어를 이용하고 계신 게 맞나요?
대충 뭔가 이상해 보이는 부분을 추려 보면 이 정도쯤 있군요.
기타 세미콜론이 빠졌다던가 대문자가 부적절하게 쓰였다던가 선언 안 된 식별자가 사용되고 있다던가...
프로그램 로직에 대해서는 별로 살펴보고 싶은 생각도 안 드는군요. 이중 루프의 안쪽 루프는 대체 무슨 의도로 작성되었는지 아마 질문자님만이 아실 듯 합니다.
답변 감사합니다
헤더파일 하나를 까먹고 안넣어줬네요
별거 아닌걸로 시간 잡아먹었네요
댓글 달기