.
1. <code> 블럭을 써주세요. 안 그러면 #include 헤더 날아가고, indentation 날아가고, syntax highlighting은 꿈도 못 꾸게 됩니다.
올리신 글을 직접 보세요. 누가 이렇게 올라온 코드를 읽고 싶겠어요?
2. if (strcmp(argv[0], "exit") == 0 || strcmp(argv[0], "quit") == 0)
if (strcmp(argv[0], "exit") == 0 || strcmp(argv[0], "quit") == 0)
왜 갑자기 뜬금없이 argv[0]와 비교하나요? 거기에 과연 어떤 문자열이 들어 있었을까요?
argv[0]
그렇게까지 급하게 과정 다 생략하고 결론으로 달릴 필요는 없을 텐데요.
과제물처럼 보이는데, 이런 과제의 경우 잘 동작하는 결과물 자체는 그다지 중요한 게 아닙니다. 잘 동작하는 프로그램을 만들기 위한 훈련이 중요하지요. 차근차근 해 봅시다.
사용자 입력이 exit이나 quit과 같은지 확인해야 할 텐데, 그럼 사용자 입력은 어디에 있을까요? argv[0]은 왜 답이 아닐까요?
사용자가 " exit", "exit " 따위를 입력하면 어떻게 해야 할까요? 그런 경우도 처리할 수 있도록 구현하려면 어떻게 해야 할까요?
문제를 잘 이해하고, 작은 문제로 쪼개고, 하나씩 해결해 보면 됩니다.
답변이 달리니까 이제 질문 내용을 삭제하는 등의 먹튀를 하시네요?
어떤 코드가 있었더라... 기억나는 대로 한번 써 보죠.
#include <string.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <wait.h> #define MAX_CMD_ARG 10 const char *prompt = "(sp@resl$) "; char* cmdvector[MAX_CMD_ARG]; char cmdline[BUFSIZ]; void fatal(char *str) { perror(str); exit(1); } int makelist(char *s, const char *delimiters, char** list, int MAX_LIST) { int i = 0; int numtokens = 0; char *snew = NULL; if ((s == NULL) || (delimiters == NULL)) { return -1; } snew = s + strspn(s, delimiters); if ((list[numtokens] = strtok(snew, delimiters)) == NULL) { return numtokens; } numtokens = 1; while (1) { if ((list[numtokens] = strtok(NULL, delimiters)) == NULL) { break; } if (numtokens == (MAX_LIST - 1)) { return -1; } numtokens++; } return numtokens; } int main(int argc, char**argv) { int i = 0; pid_t pid; while (1) { fputs(prompt, stdout); fgets(cmdline, BUFSIZ, stdin); cmdline[strlen(cmdline) - 1] = '\0'; if (strcmp(argv[0], "exit") == 0 || strcmp(argv[0], "quit") == 0) { printf("EXIT\n"); exit(0); } else { switch (pid = fork()) { case 0: makelist(cmdline, " \t", cmdvector, MAX_CMD_ARG); execvp(cmdvector[0], cmdvector); fatal("main()"); case -1: fatal("main()"); default: wait(NULL); } } } return 0; }
텍스트 포맷에 대한 자세한 정보
<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]
1. <code> 블럭을 써주세요. 안 그러면
1. <code> 블럭을 써주세요. 안 그러면 #include 헤더 날아가고, indentation 날아가고, syntax highlighting은 꿈도 못 꾸게 됩니다.
올리신 글을 직접 보세요. 누가 이렇게 올라온 코드를 읽고 싶겠어요?
2.
if (strcmp(argv[0], "exit") == 0 || strcmp(argv[0], "quit") == 0)
왜 갑자기 뜬금없이
argv[0]
와 비교하나요? 거기에 과연 어떤 문자열이 들어 있었을까요?.
.
.
.
그렇게까지 급하게 과정 다 생략하고 결론으로 달릴
그렇게까지 급하게 과정 다 생략하고 결론으로 달릴 필요는 없을 텐데요.
과제물처럼 보이는데, 이런 과제의 경우 잘 동작하는 결과물 자체는 그다지 중요한 게 아닙니다.
잘 동작하는 프로그램을 만들기 위한 훈련이 중요하지요.
차근차근 해 봅시다.
사용자 입력이 exit이나 quit과 같은지 확인해야 할 텐데, 그럼 사용자 입력은 어디에 있을까요?
argv[0]은 왜 답이 아닐까요?
사용자가 " exit", "exit " 따위를 입력하면 어떻게 해야 할까요?
그런 경우도 처리할 수 있도록 구현하려면 어떻게 해야 할까요?
문제를 잘 이해하고, 작은 문제로 쪼개고, 하나씩 해결해 보면 됩니다.
.
.
답변이 달리니까 이제 질문 내용을 삭제하는 등의
답변이 달리니까 이제 질문 내용을 삭제하는 등의 먹튀를 하시네요?
어떤 코드가 있었더라...
어떤 코드가 있었더라...
기억나는 대로 한번 써 보죠.
댓글 달기