본문 바로가기

C

(9)
[시스템프로그래밍] du 구현하기 보호되어 있는 글입니다.
[시스템프로그래밍] ls, file과 directory 지난 시간 까지는 file에 (open, read, write, lseek, close) 대한걸 배웠습니다. 이번에는 ls 명령어를 배우면서 파일의 속성과 디렉토리에 대해 공부합니다 이제 본격적으로 시스템 호출 API에 대해 살펴보기 시작합니다. 파일은 UNIX 철학의 중심이므로 시작하기에 좋습니다. 라고 책 원문에 적혀있는 걸 확인했습니당. file descriptor I/O 시스템에서 쓰이며, 커널에서 식별하기 위한 작은 정수(0,1,2)이다. directory 모든 시작은 root 폴더 '/' dir은 비어있지 않음. 무조건 '.'과 '..'을 가짐 . : 현재 디렉토리 .. : 상위 디렉토리 ? 그럼 최상위 폴더인 root에도 ..이 있을까? 더보기 실습해본 결과 있음! 그 이유는 일관성을 유지하..
[시스템프로그래밍] who, cp, buffering 컴퓨터 메모리는 user space와 system space로 나뉘어있음. 다양한 프로그램이 user space에서 running됨 커널을 통해 프로그램들이 통신함. 모든 unix 명령어들은 다른 사람이 주로 C를 이용해 만든 프로그램임 새 명령어를 추가하고 싶으면 /bin, /usr/bin, /usr/local/bin 에서 구현 who command : 어떤 유저가 서버에 접속했는지 출력해주는 명령어 logname, terminal, time, from where utmp utmp는 유닉스 및 유닉스 계열 운영 체제에서 사용되는 시스템 파일 또는 데이터베이스 이 파일은 현재 로그인한 사용자 및 시스템 관련 정보를 추적하는 데 사용 주로 /var/run/utmp 또는 /var/log/wtmp와 같은 경로..
[시스템프로그래밍] ssh, sftp, 커널과 셸 서버 접속하기 SSH란? Secure Shell Protocol, 원격 호스트에 접속하기 위해 사용되는 보안 프로토콜 ssh s@machine IP -p 기존 원격 접속은 ‘텔넷(Telnet)’이라는 방식을 사용했는데, 암호화를 제공하지 않기 때문에 보안상 취약하다는 단점이 있었다. 실제로 WireShark같은 패킷 분석 프로그램을 이용하면 누구나 쉽게 원격 접속 과정에서 옮겨지는 비밀번호나 파일 내용 등의 데이터를 탈취할 수 있다. 때문에 이를 암호화하는 SSH 기술이 등장했고, 현재 원격 접속 보안을 위한 필수적인 요소로 자리잡고 있다. 출처: https://library.gabia.com/contents/infrahosting/9002/ 작동원리 SSH는 대칭키/비대칭키 암호 방식으로 작동 보안 접..
[시스템프로그래밍] 가상화, 리눅스, WSL2와 Ubuntu 차이 이 수업에서 우리가 왜 리눅스를 쓰는지, 우리가 쓰는 툴에 대해서 먼저 공부해보았습니다. 리눅스는 내 컴퓨터에 가상화해서 올려진 운영체제라 가상화가 뭔지 알아봐야하구요! 가상화란?하나의 실물 컴퓨팅 자원(CPU, 메모리, 스토리지, 네트워크 등)을 마치 여러 개인 것처럼 가상으로 쪼개서 사용하거나, 여러 개의 실물 컴퓨팅 자원들을 묶어서 하나의 자원인 것처럼 사용하는 것 가상화의 장점 - 하나의 하드웨어를 다양한 용도에 맞게 분할하여 사용하므로 자원 활용의 경제성을 높임 - 가상머신(VM)은 동일한 하드웨어에서 구동하지만 논리적으로는 분리되어 있음. 그래서 악성코드 공격을 받아도 같은 시스템 내 다른 시스템으로 확장되지 않음 - VM은 이동성이 강해 로컬 또는 원격 가상화 서버 사이를 이동하기 쉬움 우리..
[자료구조] 불완전한 형식은 사용할 수 없습니다 오류 해결 | typedef 구조체 크기 만큼 동적할당을 하다가 분명 맞게 썼는데 자꾸 오류가 뜨는 현상이 있었습니다. 그래서 구조체 형식을 봤을 때 typedef 구조체를 선언하는 부분에서 생긴 오류인 것 같았습니다. typedef struct { ... } tree; 여기서 typedef struct tree { ... } tree; 로 바꾸니까 오류가 없어졌습니다. typedef 구조체 선언 사용법 typedef struct 구조체 이름 { . . . } 구조체 별칭 구조체 이름과 구조체 별칭의 차이인 것 같습니다. 항상 별칭만 사용해왔는데 별칭만 사용한 구조체를 익명 구조체라고 합니다. struct 구조체이름 *포인터이름 = malloc(sizeof(struct 구조체이름)); - 구조체 포인터를 선언할 때는 포인터 변수이기..
[자료구조] 포인터 응용 func1 int* func1 (void) { int *p = (int*)malloc(sizeof(int)); *p = 10; return p; } 반환값이 포인터이므로 함수의 첫 시작도 int * 형이어야 한다. func2 void func2 (int *pnum) { *pnum = 100; } 포인터 pnum을 매개변수로 넘겼으므로 (int *pnum) 으로 써야함. func3 void func3(int **pnum){ **pnum = 200; } pnum의 주소값을 매개변수로 넘겼으므로 (int **pnum)으로 써야함 *(*pnum) = *(pnum의 역참조) func4 char* func4(int size){ char *cp = (char*)malloc(sizeof(char) * size); re..
[C] 포인터 배열을 이용하여 2차원 배열 만들기 : 동적할당 포인터 배열 *p[MAX]를 선언하고 n을 읽으면 포인터배열의 각 원소에 1차원 배열을 동적으로 생성하여 연결한다. n만큼 n*n 크기로 동적할당하려면 int *p[MAX]; int n; scanf("%s", &n); //동적할당 for(int i=0; i