13시간 삽질의 결과가 실패로 끝나다

학교 유닉스 프로그래밍 수업 숙제로 나온 ‘간단한 리눅스용 쉘 smallsh 만들기’에 착수 했습니다.

C에서 문자열 처리하는건 정말 고통이더군요. 메모리 포인터에 대한 이해가 부족한데 문자열이랑
메모리 포인터로 이것저것 잘라내고 하는 과정이 너무 어려웠어요. 함수 동작을 제대로 이해하지 못하고 있었는데다… 혼자서
하다보니 더더욱 어려웠습니다.; 공부는 역시 여럿이 의견 교환하면서 하는게 더 발전적이 아닌가 싶습니다.

프로그램을 실행하고 나서 들어오는 입력값을 fgets로 한줄 받아다가 그걸 strtok로 토큰단위로 나눠서 execvp로
실행하는 단순한 것이었지만 strtok를 정확히 이해하지 못해서 들어오는 명령어들을 수행하지 못하게 되었습니다.

보니까 fgets에서 마지막에 n를 같이 보내줘서 그걸 없애줘야 하는건가 싶은데 strtok 리턴값을 저장하는 배열이 *token[MAX] 형태인데, 세개 받았으면 그냥 token[2] = 0; 해주면 되야 하는거 아닌가?


여하간 저게 안돼서 각종 명령어 실행이 안되는데다가 저기에만 매달려서 cd나 exit, 각종 환경변수 적용은 하지도 못했습니다.

애초에 server/client를 일주일 이상 잡고 있었던게 문제였죠. 알고나니 너무 단순한 문제에서 시간을 잡아먹어서 더 분통터집니다.

아 진짜 학교 그만두고 싶은 생각이 마구 납니다. 이럴 때마다.


게시됨

카테고리

작성자

태그:

댓글

“13시간 삽질의 결과가 실패로 끝나다”에 대한 2개의 응답

  1. everclear 아바타

    첨자가 좀 이상하네요; strtok 넘기시기 전에 n을 없애시는게 훨씬 편하지 않았을까 하는 생각이 듭니다.
    그나저나, c로만 제한한건가요? c++도 사용 가능했다면 stringstream, vector를 사용하면 꽤 간단히 구현하실 수 있었을텐데 ;;;

    혹시 c++ 쉘 소스 필요하시다면 연락주세요 :3

    1. JellyPo 아바타

      === 문제점 ===
      * 이걸 그대로 냈다는게 문제라면 문제겠지…
      === 해결편 ===
      * F를 받는다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.