목록분류 전체보기 (778)
치춘짱베리굿나이스
특정 케이스에서 어떤 시그널을 입력하면 어떤 반응을 보이는지 체크 기본 쉘 프롬프트 (입력값 없음) ctrl - c bash-3.2$ #ctrl-c 입력 bash-3.2$ 개행이 들어감 $?은 1로 세팅 ctrl - d bash-3.2$ exit #ctr-d 입력된 후에 콘솔창에 exit 출력됨 인자 없는 exit와 동일하게 동작함 ctrl - \ bash-3.2$ #ctrl-\ 입력 아무런 일도 일어나지 않음 (SIGIGN) $?는 이전 값에서 변하지 않음 (아무일도 일어나지 않았으므로) 기본 쉘 프롬프트 (입력값 있음) ctrl - c bash-3.2$ aaaa #ctrl-c 입력 bash-3.2$ 개행이 들어감 직전에 입력한 값은 history에 들어가지 않으며, 작동도 안 함 ctrl - d ba..
bash & echo $> echo -n "'"'"'hello'"'"'" '"hello"' $> "'"'"'hello'"'"'" → "'", '"', hello, '"', "'" 이렇게 5덩이로 짤리기 때문에 쟤네만 남음 $> echo """"'hello'"""" hello $> echo """'hello'""" 'hello' $> echo '''"hello"''' "hello" $> echo ''''"hello"'''' hello $> """"'hello'"""" "", "", 'hello', "", "" 5덩어리로 나뉘어짐 """'hello'""" "", "'hello'", "" 3덩어리로 나뉘어짐 '''"hello"''' '', '"hello"', '' 3덩어리로 나뉘어짐 ''''"hello"'''..
/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* fork_pipe.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: jiychoi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/10/02 18:45:39 by jiychoi #+# #+# */ /* Updated: 2021/10/08 13:44:08 by jiychoi ### ########.fr */ /* */ /* *******************************************************************..
자식 프로세스의 생성 부모-자식 관계 모든 프로세스는 실행 도중 프로세스 실행 시스템 콜을 통해 새로운 프로세스들을 생성할 수 있다 프로세스 실행 시스템 콜을 통해 다른 프로세스를 생성하는 프로세스가 부모 프로세스 부모 프로세스에 의해 생성된 프로세스가 자식 프로세스 프로세스의 부모-자식 관계는 트리와 같은 형태를 띈다 또한 각 프로세스를 구분하기 위해 PID (Process Identifier) 가 부여된다 자식 프로세스의 자원 자식 프로세스가 생성될 때, 부모 프로세스의 자원의 일부를 한정적으로 사용하거나, 운영체제로부터 직접 자원을 제공받아 사용한다 자식 프로세스의 실행 형태 부모 프로세스와 자식 프로세스가 함께 실행되는 경우 자식 프로세스가 모두 종료될 때까지 부모 프로세스가 대기하는 경우 (wa..

밀린거 적고 있습니다 As beautiful as a shell 주의사항 초반 설계를 확실히 해 둘 것 문자열 파싱 후 최종 반환값 명세, $?의 처리, 파싱 순서 및 execve 동작 순서 등 안 그러면 나중에 갈아엎을 때 일이 커진다 무슨일이 있어도 울지않기 주변 사람들에게 도움 많이 요청하기 혼자서 하면 무조건 해멘다 사전에 공부해야 할 내용 Mandatory 부모 - 자식 프로세스 Fork, Pipe 함수 예제 파이프라인 쌍따옴표, 홑따옴표 정리 시그널 정리 사용가능 함수 사용가능 함수 정리 구현 : minishell 빌트인 함수 exit export unset env cd pwd echo 시그널

kill_and_pause 신호를 kill 하고 50us 쉬어주는 함수 usleep을 주는 이유는, 클라이언트에서 신호를 보내는 속도보다 서버측에서 데이터를 처리하는 속도가 느릴 경우 신호가 씹혀 클라이언트와 서버 모두가 무한 루프에 빠질 수 있다

Mandatory 조건 한 문자 (char) 당 송수신하는 시그널이 8개 이상이면 안 된다 전역변수는 프로그램당 1개 이하 1000글자에 2초 이하, 100글자에 1초 이하, 10글자에 1초 이하 최근 평가지 개편으로 몇 조건들이 사라지면서 쉬운 프로젝트가 됐다 (노션 서식이 망가져 부득이하게 이미지로 대체) 이렇게 하면 클라이언트에서 정확히 한 글자당 8비트씩만 보내고 끝나기 때문에, Mandatory 조건을 만족시킬 수 있다 (단 상당히 불안정해서, 비트를 한 번에 많이 보내려 시도하면 깨질 가능성이 있음)
signal void (*)(int) signal(int sig, void (*handler)(int)); 시그널 처리 방법을 설정한다 몇몇 시그널들은 이미 정의된 행동을 함으로써 처리되는데, 이처럼 기존에 정의된 행동을 그대로 할 지, 시그널을 그냥 무시할지, 아니면 사용자 정의 행동을 하도록 바꿔줄 지 선택할 수 있다 sig는 처리해줄 시그널 번호 *handler는 시그널을 처리해줄 핸들러SIG_IGN을 인자로 넘겨주면 해당 시그널을 무시한다 함수포인터를 넘겨주면 시그널이 들어왔을 때 특정 함수를 호출한다 SIG_DFL을 인자로 넘겨주면 기존에 정의된 방법대로 수행한다 sigset_t 구조체 typedef struct { unsigned int __sigbits[4]; } sigset_t; 시그널은 ..