
nodejs docs를 살펴보면 opendir는 opendir() 함수는 디렉터리 이름에 해당하는 디렉터리 스트림을 열고 반환하는 함수이다.
const fs = require("fs");
const path = './programmers';
fs.opendir(path, { bufferSize: 64 }, (err, dir) => {
if (err) {
console.error('Error opening directory:', err);
return;
}
console.dir(dir, "dir")
});

이제, NodeJS의 fs 모듈 내의 opendir의 실행 과정을 살펴보자.

🧐
NodeJS는 크게lib폴더와src폴더로 이루어져 있다.
lib 폴더 내에는 NodeJS의내장 모듈 라이브러리가 들어 있고,
src 폴더 내에는C++ 코드가 구현되어 있다.
Nodejs Github의 dir.js에 접속해 보자.
lib/internal 폴더 속 dir.js 파일에 opendir의 함수가 구현되어 있다.

opendir 함수를 살펴보면 유효성 검사를 실시하고 dirBinding 함수의 opendir 메서드를 호출 하고 있다.
✅ 다음으로, dirBinding를 가져오는 곳을 한 번 살펴보자
require을 사용하지 않고 internalBinding으로 모듈을 가져오는 것으로 보인다.
internalBinding은 Nodejs가 Javascript를 C++에 바인딩할 때 사용하는 메서드라고 한다.
즉, Javscript에서 C++을 호출할 때 사용하는 방법인 것이다!
다음으로 C++ 코드가 존재하는 Nodejs Github의 node_dir.cc에 접속해 보자
openDir 함수를 보면 아래와 같이 SystemCall을 통해서 uv_fs_opendir을 호출하는 것을 볼 수 있다.
args.GetReturnValue()~로 끝나는데 [Node.js] C++ Addon 적용 [출처] [Node.js] C++ Addon 적용|작성자 경직를 참고해보면 GetReturnValue에 값을 Set 해주면 자동으로 리턴값으로 인식하고 가져간다고 한다.
libUV라이브러리에서 설명하는uv_fs_opendir은 아래와 같이 설명하고 있다.
https://docs.libuv.org/en/v1.x/fs.html#c.uv_fs_opendir
https://github.com/nodejs/node/blob/main/lib/internal/fs/dir.js#L289
https://github.com/nodejs/node/blob/main/src/node_dir.cc
https://blog.naver.com/PostView.naver?blogId=sssang97&logNo=221994411876
https://man7.org/linux/man-pages/man3/opendir.3.html