내가 생각해보면, 커널프로그래밍을 왜 공부하는지에 대한 이유가 있는데도 너희한테 이야기를 안해주는거같아.


내가 예전에 파일 공유하고 싶으면, 무조건 fork 해야 되는지 그거 물어봤던거 기억하냐??



이게 ipc 때문에 나왔던 이야기야.


아니 나는 아직도 내 실무수준이라던지 "공부의 필요성"에 대한 수준이 작년 12월달에 머물러있어.


AWS로 이제 데이터 통신망을 깔아줄건데, 소통방식은 전부 소켓으로 하면 됩니까??

shared memory도 ipc라는데...


이 수준이었는데, 그때에도 파일 공유에 대해서 물어봤었음.



물론,


이제는 메모리 매핑을 알기 때문에

파일을 공유하고 싶으면 그냥 아예 메모리 매핑 자체를 파일로 해버릴거야.


하지만,


그때 내 CS이해도 부족을 느낀 그때 그 시점으로 돌아가면,



fork 를 하면 파일은 공유되는데,


이거를 내가 직접 해당 파일 공유만 사용할 수 없을까??


그때는 심지어 dup, dup2 이것도 정확히 어떤 레이어에서 어떻게 작동하는지 몰랐었다.

뭔가 이상했다.


그리고, 만약 api로 존재하지 않는다면, 내가 보기에 해당 api는 내가 직접 표준라이브러리에 박아넣던지 해서 만들어서 쓸 수 있는건데...


여기서부터


"유저권한 프로그래밍을 넘어서야한다"


이 생각을 가지고 있었고,


그래서 밑도 끝도없이 "커널 프로그래밍"을 공부하겠다고 한거다.


난 아직도 모듈프로그래밍이 무엇인지 모른다.


다만, 시스템콜로 wrapping 해주는 방법은 알겠어.



나는 이제, 할수 있어.


저 짤의 마지막 결론을 보면,


복사하고싶은 pid 와 fd를 인자로 건네주고, 해당 정보를 통해서, 2차(안세봤음 3차일수도있음) input 으로 file pointer 를 다시 들여받고,

복사받고싶은 fd 를 input으로 받은 후 (let idx),

루틴의 output을 "시스템콜을 호출한 프로세스의 filp[idx]" 에다가 넣어줄 수 있어.


그리고, 해당 시스템콜을 호출한 이후부터는


나는 해당 fd를 통해서 다른 프로세스가 열고 잘 사용중인 파일에 접근이 가능해.


물론,


똑같은 inode 열수 있지. 하지만 파일 공유와 inode 공유는 달라.


여하튼,


나는 이제 다른 프로세스의 file을,

런타임에, fork와 관련없이 파이프라인이 형성되지 않은 두 프로세스 사이에서

주고받을 수 있게 되었음.




이거 혹시 api로 있음??


나 그거 물어보려고 이 질문한거야.



그리고, 이런 api가 중요하냐 있냐 를 물어보고 싶은게아니야.



이정도 수준의 자유도를 가진 프로그래밍을 나는 원한다.






CS를 괜히 배우는건 아니란거야.

그냥 나는 극한의 자유를 원해



난 캡틴 잭스패로우거든??? 아무도 내 자유를 막을 순 없어. (하드웨어의 억압은 받아들일거야. 그리고, 전반적인 리눅스라는 학문을 받아들일거고, C라는 언어, 그리고 러스트의 철학 등등은 받아들일거야. 근데 최대한 내 자유를 보장받을거임.)





여하튼,



이런 프로그래밍이

실무에서 얼마나 쓰이는지,


그리고 쓰이는 영역이 있다면


어디인지



그걸 알려줘




내 적성은 이거임.


학계가 아니라, 내 적성은 이거라고.



이새끼 뭔 시발 커널까지 조작해가면서 지가 하고싶은거 다하네.



이게 내가 원하는 수준이야.



여튼


요약


1. 저 api 있는지 말해줘

2. 저런 api 직접 만들어가면서 프로그래밍하는 분야가 어딘지 알려줘 (나 아직도 취준생각은 20퍼정도밖에 안됨)

3. 위에 5장의 이미지파일, 글귀가 본문으로 오해할수도있는데, 그림이 본문임. 해설달은것 뿐임. 그림이 8할, 본문이 2할임