Study with Me!
Seongmo
Study with Me!
전체 방문자
오늘
어제
  • Computer (126)
    • Computer Science (61)
      • Data Structure (51)
      • Algorithm (6)
      • 선형대수 with C++ (4)
    • Arm Architecture (1)
      • Register (0)
      • Assembly Instruction (1)
    • Linux (30)
      • Linux Kernel (4)
      • 라이브러리 함수 구현하기 (0)
      • 쉘, 쉘 명령어 구현하기 (15)
      • Ubuntu (11)
    • AWS (3)
    • Baekjoon (18)
    • Tools (6)
      • Git & Github (5)
      • Vim (1)
    • 개발 환경 (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • STL

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Study with Me!

Seongmo

[쉘 구현하기] ls 명령어 -a 옵션 추가
Linux/쉘, 쉘 명령어 구현하기

[쉘 구현하기] ls 명령어 -a 옵션 추가

2023. 8. 11. 19:09

ls 명령어에 -a 옵션을 추가해보자.

-a 옵션은 숨김 파일(' . '으로 시작하는 파일)도 출력하게 하는 옵션이다.

 

옵션은 getopt() 함수를 사용해서 검사했다.

이전 코드와 달리 printList() 함수를 호출할 때 옵션을 인식하는 매크로를 전달해줬다. (추후 다른 옵션 추가)

#define OPT_A 0b00001
#define OPT_L 0b00010
#define OPT_I 0b00100
void ls(int argc, char **argv) {
    int opt = 0b00000;
    int cmd;
    while ((cmd = getopt(argc, argv, "a")) != -1) {
        switch(cmd) {
            case 'a':
                opt |= OPT_A;
                break;
            case '?':
                printf("Unknown flag : %c\n", optopt);
                break;
        }
    }
    makeList();
    getTerminalWidth("termWidth.txt");

    printList(opt);

    deleteNode();
    printf("\n\n");
}

전달된 매크로에 따라 -a 옵션을 처리할지 하지 않을지는 printList() 함수에서 if 문으로 결정한다.

void printList(int opt) {
    int wordPerLine = terminalWidth / maxLength;
    if (wordPerLine > 10) wordPerLine = 10;

    int cnt = 0;
    for (Node *cur = head; cur != NULL; cur = cur->next) {
        if (!(opt & OPT_A) && cur->fileName[0] == '.') {
            continue;
        }
        int tab = maxLength - (int)strlen(cur->fileName);
        printf("%s", cur->fileName);
        for (int i = 0; i < tab; i++) printf(" ");
        cnt++;
        if (cnt % wordPerLine == 0) printf("\n");
    }
}

my_help.c 파일도 수정했다.

위 코드는 아래 이미지를 클릭해 깃허브에서도 확인할 수 있다.

깃허브 이미지 링크

저작자표시 (새창열림)

'Linux > 쉘, 쉘 명령어 구현하기' 카테고리의 다른 글

[쉘 구현하기] vim 실행하는 명령어 구현  (0) 2023.08.12
[쉘 구현하기] ls 명령어 -l 옵션 추가  (0) 2023.08.11
[쉘 구현하기] fork(), exec()류 함수 호출 시 실행인자 주기  (0) 2023.08.11
[쉘 구현하기] execv() 사용을 위한 문자열 배열 만들기  (0) 2023.08.11
[쉘 구현하기] ls 명령어 터미널 크기에 최적화  (0) 2023.08.09
    'Linux/쉘, 쉘 명령어 구현하기' 카테고리의 다른 글
    • [쉘 구현하기] vim 실행하는 명령어 구현
    • [쉘 구현하기] ls 명령어 -l 옵션 추가
    • [쉘 구현하기] fork(), exec()류 함수 호출 시 실행인자 주기
    • [쉘 구현하기] execv() 사용을 위한 문자열 배열 만들기
    Study with Me!
    Study with Me!
    Study with Me!

    티스토리툴바