목록42/42s Cursus (46)
치춘짱베리굿나이스
/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* 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; 시그널은 ..
미니톡 하시는 분이 계셔서 생각나서 올렸읍니다. 주의사항 libft 사용 = 상관없다 이유는.. minitalk 사용가능 함수와 libft 사용가능 함수가 겹치기 때문 (write, malloc, free...) Makefile은 클라이언트, 서버용을 따로 만들어두는 것이 좋을듯? 루트 폴더에 있는 Makefile은 두 Makefile을 같이 진행하는 식으로..) 보너스는 사실상 클라이언트 - 서버간 TCP 구현을 유도한 부분 쉘에서의 큰따옴표 ("") 와 작은따옴표 ('') 차이 큰따옴표는 내부에 변수 ($변수명) 가 있을 경우 해당 변수를 실제 값으로 치환해서 표시 $> temp=$'hello\n\n' $> echo "hello$temp" hello 작은따옴표는 $변수명 을 그대로 출력한다주의: 변수..
감사합니다. 항상 행복하세요. 특히 @sungkim @junmkang 내내 괴롭혀서 미안합니다. 시도때도없이 개인메시지 보내서 테러하다시피 해도 싫은소리 없이 묵묵히 답변해주던 정말 좋은 사람들.. 왕감사 제일 힘들었던 건... 사실 모르겠다 그냥 다 새롭고 다 머리아팠다 뮤텍스를 언제 적절히 걸고 풀 지 고민하는거랑 시간밀림 없이 어떻게 처리할지 그리고 뜬금없이 터지는 세그먼트폴트나 무한루프 잡기가 제일 귀찮았던거같아 스레드들이 정시에 딱딱 작동하지 않으면 (조금이라도 딜레이가 있으면) 바로 죽어버리기 때문에 디버깅이 귀찮았다 lldb 못 쓰고 전부 프린트에프 찍어서 디버깅했다 이 과제 프린트에프 쓸수있게 해준건 진짜 최후의 양심임 그래도 누구 말마따나 막상 완성하고 평가끝나면 좀 뿌듯하고 철학자들 귀..