opendir이 실행되는 과정

김동현·2024년 1월 2일
0

NodeJS

목록 보기
1/6
post-thumbnail

opendir

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++ 코드가 구현되어 있다.

Lib

Nodejs Github의 dir.js에 접속해 보자.
lib/internal 폴더 속 dir.js 파일에 opendir의 함수가 구현되어 있다.

opendir 함수를 살펴보면 유효성 검사를 실시하고 dirBinding 함수의 opendir 메서드를 호출 하고 있다.

✅ 다음으로, dirBinding를 가져오는 곳을 한 번 살펴보자

  • 아래의 코드를 보면, 일반적으로 모듈을 가져오는 방식인 require을 사용하지 않고 internalBinding으로 모듈을 가져오는 것으로 보인다.
  • internalBinding은 Nodejs가 Javascript를 C++에 바인딩할 때 사용하는 메서드라고 한다.

    즉, Javscript에서 C++을 호출할 때 사용하는 방법인 것이다!

SRC

다음으로 C++ 코드가 존재하는 Nodejs Github의 node_dir.cc에 접속해 보자

  • C++ 언어로 구현된 openDir 함수를 보면 아래와 같이 SystemCall을 통해서 uv_fs_opendir을 호출하는 것을 볼 수 있다.

libUV

  • 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

profile
달려보자

0개의 댓글