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 |