Execve 함수를 이용해 입력받은 문자열을(ex) /bib/ls) 실행하는 프로그램을 짜보았습니다.

olsson77의 이미지

#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);
 
    }

혹시 잘 못된 부분이나 수정해야 할 부분이 있을까요?

세벌의 이미지

code 태그로 소스를 감싸 주세요.

chadr의 이미지

개발자라면 본인이 짠 프로그램의 기본적인 테스트를 할 줄 아는 것도 하나의 덕목입니다.

프로그램은 입력이 있으면 출력이 있기 마련입니다.
본인이 짠 프로그램에 어떤 입력을 주면 어떤 출력이 나와야할지를 먼저 정의하세요.

그리고 모든 입력 가능한 값의 조합을 나열한 다음에 그 조합의 출력이 뭔지 적어보세요.
아마 수개 또는 수십개가 나올수도 있습니다.

그걸 모두 프로그램에 입력하고 적어놨던 출력이 나오는지 확인해보세요.
그러면 프로그램이 정상적인지 아닌지 검증 가능합니다.

물론 입력값이 거의 무한대 조합이거나 사람이 도저히 손으로 만들수 없는 조합일수도 있습니다.
그러면 그 조합을 만드는 프로그램을 만들어보세요.

그것도 힘들다면 테스트용 입력을 만드는 방법은 아래 정도로 만들면 어느정도 커버는 됩니다.

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.

olsson77의 이미지

과제라서 나름 짜봤는데 잘못된 부분을 못찾겠어서 도움이라도 구해볼까 올려보았습니다
처음에는 tokenize 하지 않고 gets를 이용해 받은 것을 그대로 넣어주었으나 이러면 안된다는 것을 알고 tokenize하여 넣어주어야 겠다는
생각까지는 하게되었는데 실행이 안되서 여쭈어보려고 올린 글입니다.
/bin/ls 를 입력하면 ls처럼 작동하게끔 짜는게 목표고요
무튼 답변 감사합니다

 의 이미지

C언어를 이용하고 계신 게 맞나요?

대충 뭔가 이상해 보이는 부분을 추려 보면 이 정도쯤 있군요.

    char str[];
    gets(str);

    char*b[];
    b[0]=temp;

        If(temp=NULL){

                If(b[i]=NULL){

기타 세미콜론이 빠졌다던가 대문자가 부적절하게 쓰였다던가 선언 안 된 식별자가 사용되고 있다던가...

프로그램 로직에 대해서는 별로 살펴보고 싶은 생각도 안 드는군요. 이중 루프의 안쪽 루프는 대체 무슨 의도로 작성되었는지 아마 질문자님만이 아실 듯 합니다.

olsson77의 이미지

헤더파일 하나를 까먹고 안넣어줬네요
별거 아닌걸로 시간 잡아먹었네요

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.