본문 바로가기

분류 전체보기

(40)
프로세스 그리고 shell의 구현 OS를 배울 때는 프로그램 / 프로세스 / 프로세서 라는 단어를 구분할 수 있어야 한다. 프로그램 - 명령어의 집합 프로세스 - 실행 중인 프로그램 프로세서 - 실행 중인 주체 즉, cpu 1. ps ps 명령어는 현재 이 터미널에서 실행중인 프로세스를 보여주는 명령어이다. 그리고 ps -aux 를 이용하면 이 OS에서 돌고 있는 모든 프로세스를 보여준다. 2. The Shell 명령어를 입력했을 때 이것을 이해하고 실행시켜주는 창을 Shell 이라고 한다. Shell이 해야하는 기능은 다음과 같다. 1. 명령어 실행 2. input을 키보드로부터 받아서 output을 사용자에게 보여주어야 함 3. shell에서 프로그래밍 (할 수 있다는 것만 알아두자.) 그리고 Shell에 대해서 좀 더 자세히 알아보..
[파이썬] get, post 요청하기 앞선 글에서 봣던 내용을 조금 더 자세히 정리해보려 한다. 백엔드 공부를 하기 전, 인터넷에 대한 이론 공부는 네트워크 프로그래밍, 컴퓨터망, 데이터 통신 등으로 자세히 공부해야 하지만 무언가 만들어보고 싶다면 우선은 get, post만 알아도 충분하다. 1. GET 통신하기 GET 통신의 예시는 다음과 같다. www.example.com?id=honeyricecake&pass=1234 이런 식으로 URL뒤의 ? 마크를 통해 URL의 끝을 알리며, 데이터 표현의 시작점을 알리고, key, value쌍의 데이터들을 보내게 된다. 이 때 쌍은 &로 구별하고 key, value는 = 으로 구별하게 된다. import requests datas = {'key1' : 'value1', 'key2': 'value2..
C에서 현재 시간 출력 #include #include int main() { time_t ct; struct tm tm; ct = time(NULL); tm = *localtime(&ct); // struct tm의 포인터가 리턴 printf("%d %d %d hour: %d min: %d sec: %d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec); } 90년 대를 의미하므로 year 에서 + 1900, 월에서 + 1을 해주면 원하는 결과를 얻을 수 있다.
[Linux] kill(시스템 콜), 핸들러2 1. kill #include #include #include #include int main(int argc, char* argv[]) { int pid, sig_num, result; if (argc != 3) { exit(1); } pid = atoi(argv[1]); sig_num = atoi(argv[2]); result = kill(pid, sig_num); printf("result = %d\n", result); } 이 코드를 kill이라는 이름으로 컴파일했다면 ./kill [pid] [signum]으로 기존의 kill처럼 사용이 가능하다. 즉, 시스템콜 kill(pid, signum)는 pid로 signum의 signal을 보내며, 명령어 kill 역시 시스템콜 kill을 통해 구현되었을..
[Linux] Signal Handler 1. signal 특정 이벤트가 발생하였을 때 신호를 보내서 알려주는 걸 시그널이라고 한다. 대표적으로 Ctrl + C를 누르면 프로그램이 종료되는 것이 있다. 이러한 시그널의 종류는 아래와 같은 것들이 있다. 이 중 Ctrl + C 는 InterrupSignal 즉 SIGINT로서 2번 시그널이다. 2. signal 시스템 콜과 시그널 핸들러 ex. #include #include #include void my_sig_handler(int signum) { printf("Signum = %d\n", signum); } int main() { int i; signal(SIGINT, my_sig_handler); for (i = 0; i < 100; i++) { sleep(2); printf("Hello\..
[Linux] write 명령어 구현 #include #include #include #include #include int main(int argc, char* argv[]) { int fd; char buf[100]; if(argc != 2) { fprintf(stderr, "usage: write0 ttyname\n"); exit(1); } fd = open(argv[1], O_WRONLY); if (fd == -1) { perror(argv[1]); // 오류 메시지를 stderr로 출력 exit(1); } while(fgets(buf, 100, stdin) != NULL) { if(write(fd, buf, strlen(buf)) == -1) { break; } } close(fd); } 바로 전 게시글에서 tty를 알아보았다. 이..
[Linux] 파일 시스템, inode 1. 파일 관리 파일은 메모리에 있는 것이 아닌 하드디스크에 있다. 메모리는 작업을 위한 공간으로 휘발성이기 때문에 저장을 위한 공간인 안전한 하드디스크에 저장하는 것이다. 메모리를 이용할 때는 결국 '어디에 뭐를 써, 읽어' 가 거의 모든 것이었고 이 때 '어디'는 메모리 주소였다. 그럼 파일의 저장 및 관리는 어떻까? 파일의 저장 및 관리도 주소를 이용해서 어디에 쓰고, 읽으라고 하면 충분한게 아닐까? 그 어디를 명시하는 것이 메모리의 주소와는 달리 하드디스크나 SSD는 디스크의 블록, 섹터, 트랙 같은 것으로 명시한다. 어디에 읽고 쓰는 것 역시 메모리는 한 byte 단위이지만 디스크에서는 읽고 쓰는 시간이 메모리에 비해 수천배이기 때문에 1byte 단위는 매우 비효율적이므로 블록 단위로 읽고 쓴다..
[Linux] pwd, ln, find, grep pwd 명령어는 현재 디렉토리의 위치를 알려주는 명령어이다. ln 명령어는 링크의 약자로 윈도우로 생각하면 바로가기이다. 그래서 ln a.c b.c로 b.c 파일을 만들어 b.c파일을 수정하면 a.c파일이 수정되는 것을 볼 수 있다. ln -s 라는 옵션도 있다. ln -s a.c c.c로 c.c를 만들어주면 파일 자체도 다르게 표시되고 ls -al로 정보를 확인하면 이렇게 링크 파일임이 표시되는 것 역시 볼 수 있다. 특정 파일을 빨리 찾고 싶을 때 쓰는 명령어로 find가 있다. find [dir] -name [name]을 하면 파일 이름이 name인 파일을 dir디렉토리에서 찾을 수 있다. ex. find . -name signal.h -> signal.h 파일을 현재 디렉토리 기준으로 찾아준다. ..