GMS Linux: start?

This commit is contained in:
2025-12-30 01:20:20 +00:00
commit ac241a9148
48 changed files with 2028 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE 1024
// 사용법:
// 1. 파일 읽기: grep <pattern> <filename>
// 2. 파이프(Stdin): cat file | grep <pattern>
int main(int argc, char *argv[]) {
// 최소한 패턴은 있어야 함
if (argc < 2) {
printf("Usage: grep <pattern> [filename]\n");
return 1;
}
char *pattern = argv[1];
FILE *fp;
// 인자가 2개면 (grep pattern) -> 표준 입력(stdin) 사용
if (argc == 2) {
fp = stdin;
}
// 인자가 3개 이상이면 (grep pattern file) -> 파일 열기
else {
fp = fopen(argv[2], "r");
if (!fp) {
perror("grep");
return 1;
}
}
char line[MAX_LINE];
// fp가 파일이든 stdin이든 똑같이 읽음
while (fgets(line, sizeof(line), fp)) {
// strstr: 부분 문자열 찾기
if (strstr(line, pattern) != NULL) {
printf("%s", line);
// 입력에 개행이 없는 경우(드물지만)를 대비해 안전장치
// (보통 fgets가 개행까지 읽어오므로 중복 개행 방지 로직 필요시 추가)
// 여기서는 단순하게 그대로 출력
}
}
// 파일일 때만 닫아줌 (stdin은 닫으면 안 됨)
if (argc > 2) {
fclose(fp);
}
return 0;
}