우울에서 뇌에 납 보충해주고 싶었는데
프로젝트 패스하니까 우울증 치료됐다
이제 다음 과제인
파일 디스크립터 확장만 하면
프로젝트 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한애도 똑같이 참조해야 한다는 거다
으음…
일단 트라이 박아봐야겠다