WSL2 & 우분투 설치 https://www.digitalocean.com/community/tutorials/how-to-install-the-windows-subsystem-for-linux-2-on-microsoft-windows-10 Windows Powe
calc1.c 계산기 프로그램 calc2.c 함수로 나눈 계산기 프로그램 중단점 디버그 add.c sub.c mul.c div.c remainderr.c calc2.c calc2 바이너리 컴파일 gdb로 calc2 프로그램 기동: gdb calc2 add() 함수 호출 전에 breakpoint 설정하고 프로그램 실행: b add (gdb) r...
bash 쉘 프롬프트 커스터마이징 오리지널 echo $PS1 \[\e]0;\u@\h: \w\a\]${debianchroot:+($debianchroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ 변경할 PS1 export PS1="\e[0;32m[\u@\h:\w]\$ \e[0m" P...
시스템 환경변수 > 환경변수란? 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임으로 쉘에서 정의되고 실행되는 동안 프로그램에 필요한 변수를 말합니다. > * 주요 환경변수 목록 * $PATH 환경 변수의 경로 >> - 명령어 입력시 환경변수에
요약 >- printf() 형식화된 문자 출력 sprintf() 형식화된 데이터를 버퍼로 출력 snprintf() 크기를 정한 후 형식화된 데이터를 버퍼로 출력 scanf() 데이터 읽기 (stdin으로부터 입력받음) sscanf() 데이터 읽기 (char*로부터 입력받음) getchar() 사용자가 키보드로 입력한 문자/문자열에서 한 글자를 읽어 반환하는...
목차 비트 비트 연산자 비트 연산자의 대입 연산자 MSB 부호비트 2의 보수법 비트 연산에 unsigned char 타입을 쓰는 이유 연산자 우선순위 비트 플래그 플래그를 사용한 비트 조작 비트 켜기, 끄기, 뒤집기, on/off 상태 확인하기 비트 플래그가 유용한 이유 비트 마스크 수강 신청 프로그램 course.c 비트 > 2진수를 저장하는 단위입니다...
2-1 주소록 >1. 출력이 아니라 애초에 저장할때 크기 제한하기 외계문자 출력 안되게 수정하기 동적할당 빼기 2-2 수강신청 >1. 기존 Error 함수들 수정하기 X비트 표시 빼기 전역변수는 지역변수로 옮기기 비트연산은 pow말고 shift연산으로 하기 동적할당 빼기 콤마 제대로 찍기 >7. count 증가 수정하기 CountCheck 에러함수 적용...
과제 - 1 my_strcpy 함수 구현 과제 - 2 my_strcat 함수 구현 my_strstr 함수 구현 my_strtok 함수 구현 main 함수에 테스트 과제 - 3 수강 신청 입력 양식 변경 >1. 과목명 입력받아 공백 제거하기 콤마로 분할하기 존재하는 과목명인지 체크하기 분할된거 양식 맞춰 이어붙이기 결과 > 학습 내용 1-1. s...
계산기 >- 괄호 없이 문자열로 계산식 입력받기 공백 제거하기 공백 제거한 문자열은 중위표기법이라 후위표기법으로 바꾸기 연산자 우선순위를 비교해야 스택1에서 어떤 연산자를 먼저 빼낼지 확인 가능함 예시 A + B * C => A B C * + A * B + C => A B * C + 10 - 5 + 2 * 11 => 10 5 -...
과제 - 1 >1. AMAX, BMAX, C_MAX 중 한 개의 값이 필요한 경우 해당 값이 정의된 헤더파일만 include 합니다. BMAX, CMAX 둘다 필요한 경우 headerb.h, headerc.h 둘다 include해서 컴파일이 되어야합니다. 과제 - 2 >1. 2-4 처리 중간 결과에 대한 디버깅을 위한 디버깅 코드 추가하기 (내부 변수 내...
2-1 주소록 >메모리 낭비 안하기.. 한글 4자까지 입력 가능하지만 공백도 입력받기 때문에 name[13]보다는 temp가 커야함 여기서 만약 입력받은 문자열이 temp[50]을 넘어간다면?? 2-3 문자열 my_strcpy >1. my_strcpy 함수는 if문으로 수정했습니다. mystrcpy 함수에서 destbufsize 값과 비교되는 대상 값이 ...
수정 필요 2-1 문자열 입력 받는거랑 같은 문제 (한글 최대 4자) fgets로 이름 입력을 받는데, 사이즈를 넘어가면 stdin에 남아있음 입력버퍼는 따로 while 반복문으로 제거함. 따라서 이름을 입력할때 사이즈 오버되어도 괜찮음. 문제는 사이즈를 오버하지 않으
1. fgets과 stdin 문제 (완료) Enqueue 함수에서 이름 복사할때 strcpy로 수정했습니다. (완료) Dequeue 함수에서 필요없는 부분을 수정했습니다. (완료)
리눅스 파일과 파일 시스템 (1) 파일 >- 파일 - 관련 있는 정보들의 집합 파일 시스템 - 파일들이 디스크 상에서 구성되는 방식 파일에 이름을 붙이고 저장, 탐색을 위해 파일을 어디에 위치시킬 것인지 나타내는 체계 (2) 파일 종류 Regular file >-
과제-1 PrintName() 동적할당 문자열 free 수정필요 > 과제-2 chmod() 함수가 결과적으로 적용되지 않음 ... ch_mod 프로그램 진행중 과제 - 1 fileinfo
**1. SetUID SetGID Sticky Bit 파일 시스템 및 I-node와 데이터 블록의 관계 umask** 과제 - 1 수정 fileinfo 파일 정보 출력 > 수정사항 char* 동적할당 -> char[] 에러 처리 과제 - 2 ch_mod 권한 변경
리눅스 디렉토리 / /bin /boot /dev /etc /home /lib /media /mnt /opt /proc /root /run /sbin /sys /usr /var /tmp /lost+found 현재 작업 디렉토리 ./ cwd current working
4-1 과제-2 ch_mod 권한 변경 > 1. 에러 예외처리 4-2 과제-1 dirinfo 디렉토리 정보 출력 > 1. 반복된 반복문 수정 file1000 말고 이름 바로 받아서 출력 scanf, fgets 중 하나만 사용 에러 예외처리
File Descriptor > - 시스템으로부터 할당 받은 파일을 대표하는 정수 파일을 관리하기 위해 시스템이 필요로 하는 파일에 대한 정보를 가지고 있는 제어블록 입니다. 파일마다 독립적으로 존재하며, 시스템에 따라 다른 구조를 가질 수 있씁니다. 대개 보조기억장치
my_cp 파일 복사 > 수정사항 버퍼 크기 추가 수정사항 버퍼 + memset lseek 제거 src.dat만 존재한다는 가정 my_cp e.dat ee SRC OPEN errno[2]: No such file or directory my_cp src.dat ./
수정 구조체 50개 생성 처음 오픈할때 read, 종료할때 write 아이디 중복 확인 저장된 정보 갯수 확인 삭제 2-3 수강신청 프로그램 파일저장 fileio1.c f.txt
FILE Stream pg.136~147 1. fopen() >함수 원형. FILE* fopen(const char* filename, const char* mode) 기능. 항목 읽기 filename이 지정한 파일을 엽니다. 헤더. `` 매개변수1. const ch
4-3 과제-1을 File I/O 라이브러리 함수를 사용하여 구현하기
Q) 프로그램 수행하여 데이터 입력받고 kill -9 프로그램\_pid로 프로그램을 강제 종료했을 경우, 파일에 데이터가 정상 저장되는지 확인.정상 저장 안된 경우에 kill -9로 프로그램을 강제 종료해도 정상 저장할 수 있도록 프로그램 수정
signal() 학습sigaction(), sigemptyset(), sigfillset(), sigaddset(), sigdelset(), sigismember() 학습처음 SIGUSR1 시그널을 수신하면 "SIGUSR1 first"를 출력하고, 두번째 SIGUSR1
과제-1.1\. 처음 SIGUSR1 시그널을 수신하면 "SIGUSR1 first"를 출력하고,두번째 SIGUSR1 시그널을 수신하면 "SIGUSR1 second"를 출력하고,세번째 SIGUSR1 시그널을 수신하면 프로그램을 종료하는 프로그램을 구현하시오.2\. SIGT
async-signal-safe deadlock(교착상태) volatile sigatomict flag로 선언하면 시그널의 일시적인 블록 없이 읽기, 쓰기를 안전하게 수행 할 수 있다. 단, flag++ 같은 다수의 인스트럭션을 필요로 하는 동작에서는 안정성을 보장하지
real uid vs effective uidreal gid vs effective gidreal gid프로세스를 실행시키는 유저의 그룹 IDeffective gid실행되는 프로세스의 그룹 권한어떤 그룹 권한으로 프로세스를 실행 중인지부모 프로세스 & 자식 프로세스한
1. 문제 : 파일에서 특정 문자열을 찾아서 문자열이 존재하는 라인 번호와 해당 라인을 모두 출력하는 프로그램을 작성하시오. (리눅스 grep 명령어를 호출하여 기능을 수행하도록 프로그램 작성) 2. 입력 : 프로그램 실행 시, 인자로 파일명과 찾을 문자열을 입력받는다. 파일명은 1개로 제한한다. (프로그램명 찾을문자열 파일명) 3. 출력 : a. 파일에서...
1. 문제 : a. 과제-1을 grep 명령어를 호출하는게 아니라 직접 멀티 프로세스로 구현하기 b. 부모 프로세스는 자식 프로세스를 n개를 생성하여, n개의 자식 프로세스가 파일에서 찾는 범위를 나눠서 파일에서 매칭되는 문자열을 찾고, 부모 프로세스는 자식 프로세스에
Thread 하나의 프로세스 내에서 여러 개의 실행 흐름(단일, 동시적, 병렬적)을 두어 작업을 효율적으로 처리하기 위한 모델이다. 사용 이유 메모리 절약 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행하게 되면, 프로세스를 생성하여 자원을 할
4-6 Process의 과제-2를 멀티 쓰레드로 변경하여 프로그램을 작성하시오.입력 및 출력 조건은 동일함
Race condition 두 개 이상의 병렬 프로세스(혹은 스레드)들이 하나의 자원에 접근하기 위해 경쟁하는 상태 Critical section 공유되는 자원에서 문제가 발생하지 않게 독점을 보장해줘야 하는 영역 상호 배제 - 하나의 프로세스가 임계
문제. 은행 잔고 프로그램을 멀티 쓰레드로 작성하시오. 은행 잔고는 전역 변수로 선언 은행 잔고를 조회하는 쓰레드는 3개 존재하고, 각 쓰레드는 은행 잔고를 1초에 한번씩 조회하여 출력하도록 쓰레드 구현 은행 잔고를 업데이트하는 쓰레드는 2개 존재하고, 1개 쓰레드
리눅스 가상 메모리 리눅스의 각 프로세스는 4GB를 차지한다. 프로세스를 실행하기 위해서는 코드가 반드시 메모리에 있어야 하는데, 어떻게 하면 한정된 메모리에서 여러 프로세스를 실행시킬 수 있도록 메모리 구조를 가져갈 수 있을까? 이때 활용하는 것이 가상 메모리이다. 가상 메모리를 통해 프로세스간 공간을 분리하면, 프로세스 이슈가 전체 시스템에 영향을 주지...
Inter-Process Communication (IPC) 프로세스는 각자 독립된 메모리 공간을 가지고 있어 서로 간의 데이터를 공유할 방법이 없다. 그렇기에 나온 방식이 IPC로, 프로세스 간 통신을 하는 방법이다. 프로세스 커널이 제공한 IPC 설비를 이용해 프로세스 간 통신을 할 수 있게 되며, IPC 통신 방법에는 여러 가지가 있다. 공유메모리(...
TCP/UDP 기본 개념 TCP (Transmission Control Protocol, 전송 제어 프로토콜) 인터넷 상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜 연속성보다는 신뢰성 있는 전송이 중요할 때에 사용하는 프로토콜 ex) 파
` 4-10 shm 종료1 - shmid 제거하고 stat buf 확인 안되어서 에러->종료 종료2 - 현재 접근 프로세스 수 1->종료 문제는 shmat while문 밖에서 1회로 수정하면 다른 프로스세스 측에서 sem post 처리가 안됨 시간차인지 sem값이 실
다중 입출력 어플리케이션이 여러 개의 파일 디스크립터를 동시에 블록하고, 그 중 하나라도 블록되지 않고 읽고 쓸 준비가 되면 알려주는 기능 다중 입출력 | 파일 디스크립터 중 하나가 입출력이 가능할 때 알려준다. 준비 | 준비된 파일 디스크립터가 없다면 하나 이상의 파
4-12 다중입출력epoll_tcp_server.cepoll_tcp_client.c
HTTP 프로토콜 인터넷 상에서 데이터를 주고받기 위한 서버/클라이언트 모델을 따르는 프로토콜 어플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다. HTTP는 Connectless 방식으로 작동한다. 서버에 연결하고, 요청해서 응답을 받으면 연결을 끊어버린다.