우울에서 뇌에 납 보충해주고 싶었는데
프로젝트 패스하니까 우울증 치료됐다
이제 다음 과제인
파일 디스크립터 확장만 하면
프로젝트 2 클리어다
바로 가보자
ദ്ദി(。•̀ ᗜ<)
stdin, stdout을 닫을 수 있으며 dup2 시스템 콜을 구현해야 한다
현재에는 기본적으로 stdin(0), stdout(1)을 안닫는다
나도 exit시 0,1은 스킵하고 2부터 닫도록 구현해놓았다
그치만 이번 과제에선 둘 다 닫기 허용해야 한다
close(0) 후에는 입력이 더 이상 읽히면 안 됨
close(1) 후에는 어떤 출력도 나가면 안 됨
dup2 시스템 콜 구현int dup2(int oldfd, int newfd);
dup2()는 oldfd의 복사본을 지정된 번호 newfd로 만든다
성공 시 newfd 반환
newfd가 열려 있을 경우 슬쩍 닫은 뒤 재사용
oldfd가 유효하지 않을 경우
-1 반환, newfd는 닫지 않음oldfd가 유효하고 newfd==oldfd 인 경우
newfd 반환dup2로 만든 FD들은 fork 하고 나서도 잘 작동해야 한다
stdin/stdout은 별 거 없고
간단한 매크로 같은 걸로 처리하면 될 거 같다
define STDIN_FD ... 이런거 말이다
그리고 fd가 stdin/stdout인지 아닌지에 따라 -1 반환하는 조건도 넣어주고
해서 통과했다고 하던데 될지는 모르겠다
그리고
dup2가 어렵다고 한다…
_〆(。。)
fd를 하나 더 만들고 같은 파일 참조하게 하는 건데
둘 중 하나가 close하더라도 다른쪽은 볼 수 있어야 한다
이게 첫번째 포인트고 두 번째 포인터는…
fork해도 fork한 fd테이블의 애들이 똑같은 파일을 참조하며 dup한애도 똑같이 참조해야 한다는 거다
으음…
일단 트라이 박아봐야겠다