grep 명령어 구현 코드 및 결과
static void do_grep(regex_t *pat, FILE *src);
int main(int argc, char *argv[])
{
regex_t pat;
int err;
int i;
if (argc < 2)
{
fputs("no pattern \n", stderr);
exit(1);
}
err = regcomp(&pat, argv[1], REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
if (err != 0){
char buf[1024];
regerror(err, &pat, buf, sizeof buf);
puts(buf);
exit(1);
}
if (argc == 2){
do_grep(&pat, stdin);
}
else {
for (i = 2; i < argc; i++){
FILE *f;
f = fopen(argv[i], "r");
if (!f){
perror(argv[i]);
exit(1);
}
do_grep(&pat, f);
fclose(f);
}
}
regfree(&pat);
exit(0);
}
static void do_grep(regex_t *pat, FILE *src)
{
char buf[4096];
while (fgets(buf, sizeof buf, src))
{
if (regexec(pat, buf, 0, NULL, 0) == 0){
fputs(buf, stdout);
}
}
}
리눅스 디렉터리 구조
- 최상위 디렉터리인 루트 /를 시작으로하며, 디렉터리 트리라고도 함.
/ : 최상위
/bin : 시스템 실행 파일(명령어) 보관 <-> /usr/bin : 일반 사용자를 위한 실행파일
/sbin : 관리자용 명령어
/lib : 시스템 라이브러리 디렉터리 <-> /usr/lib : 유저 라이브러리 디렉터리
/usr : 여러 컴퓨터에서 같이 쓸수있는 sw 파일 보관, /usr/bin, /usr/sbin, /usr/lib, /usr/share
/usr/src : 시스템 실행파일/리눅스 커널 소스코드 보관, 사용자가 직접 작성한건 보관 x
/usr/include : 시스템/커널 헤더파일 보관
/usr/share : 서로 다른 아키텍처에서도 사용가능한(공유가능한) 파일들 존재 ex) man, info 같은 다큐먼트
-> /usr/share/man
/usr/local : /usr는 배포판이 관리, /usr/local은 시스템 관리자(사용자) 본인이 관리
/var : 자주 바뀌는거 ex) 로그, 프로세스ID
/etc : 시스템 설정 파일
/dev : 디바이스 파일
/proc : 프로세스 파일 시스템에 의해 프로세스가 파일로 표현됨
/sys : sysfs로 시스템 관련 정보 보관(프로세스가 /proc에 있어 그 외 정보) ex) 디바이스, 디바이스 드라이버
/boot : 리눅스 커널 vmlinuz 보관
/root : su/root의 디렉터리
/tmp, /var/tmp : 임시 파일
mkdir, rmdir 함수 API
real 755 : 111 101 101
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
int main(int argc, char *argv[]){
int i;
if (argc < 2){
fprintf(stderr, "%s : no argument\n", argv[0]);
exit(1);
}
for (i=1; i < argc; i++){
if (mkdir(argv[i], 0777) <0){
perror(argv[i]);
exit(1);
}
}
exit(0);
}
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[]){
int i;
if (argc < 2){
fprintf(stderr, "%s : no arguments\n", argv[0]);
exit(1);
}
for (i = 1 ; i < argc; i++){
if (rmdir(argv[i]) < 0){
perror(argv[i]);
exit(1);
}
}
exit(0);
}
'컴퓨터과학' 카테고리의 다른 글
프로그래밍연습 - 1.[C] 함수 포인터, 문자스트림, 구조체 1 (0) | 2022.06.21 |
---|---|
리눅스 프로그래밍 4 - 메모리, 프로세스, 시그널, 환경, 로그인 (0) | 2022.06.01 |
리눅스 프로그래밍 2 - stdio, head 구현, gdb 디버깅 (0) | 2022.05.31 |
리눅스 프로그래밍 1 - 리눅스 개요, 스트림 시스템 콜, cat 구현 (0) | 2022.05.29 |
파이썬 - 02. 원격 저장소 이용하기 + 온도변환기, 계산기, 스톱워치 (0) | 2022.05.11 |