Node.js에서 파일 디스크립터 작업하기
파일 시스템에 있는 파일과 상호 작용하려면 먼저 파일 디스크립터를 가져와야 합니다. 파일 디스크립터는 열린 파일에 대한 참조이며, fs
모듈에서 제공하는 open()
메서드를 사용하여 파일을 열 때 반환되는 숫자(fd)입니다. 이 숫자(fd)는 운영 체제에서 열린 파일을 고유하게 식별합니다.
파일 열기
CommonJS (CJS)
const fs = require('node:fs')
fs.open('/Users/joe/test.txt', 'r', (err, fd) => {
// fd는 파일 디스크립터입니다.
})
fs.open()
호출의 두 번째 매개변수로 사용한 'r'
에 주목하세요. 이 플래그는 파일을 읽기 위해 연다는 의미입니다. 일반적으로 사용하는 다른 플래그는 다음과 같습니다.
플래그 | 설명 |
---|---|
'w+' | 이 플래그는 파일을 읽기 및 쓰기 위해 엽니다. 스트림을 파일의 시작 부분에 배치합니다. |
'a+' | 이 플래그는 파일을 읽기 및 쓰기 위해 열고 스트림을 파일의 끝 부분에 배치합니다. |
콜백에서 파일 디스크립터를 제공하는 대신 파일 디스크립터를 반환하는 fs.openSync
메서드를 사용하여 파일을 열 수도 있습니다.
const fs = require('node:fs')
try {
const fd = fs.openSync('/Users/joe/test.txt', 'r')
} catch (err) {
console.error(err)
}
작업 수행
선택한 방식으로 파일 디스크립터를 가져오면 fs.close()
를 호출하는 것과 같이 파일 시스템과 상호 작용하는 다른 많은 작업을 수행할 수 있습니다.
fsPromises 사용
fs/promises
모듈에서 제공하는 promise 기반 fsPromises.open
메서드를 사용하여 파일을 열 수도 있습니다. fs/promises
모듈은 Node.js v14부터 사용할 수 있습니다. v14 이전, v10 이후에는 require('fs').promises
를 대신 사용할 수 있습니다. v10 이전, v8 이후에는 util.promisify
를 사용하여 fs
메서드를 promise 기반 메서드로 변환할 수 있습니다.
ES Modules (MJS)
import fs from 'node:fs/promises'
async function run() {
const fileHandle = await fs.open('example.txt', 'r')
try {
filehandle = await fs.open('/Users/joe/test.txt', 'r')
console.log(filehandle.fd)
console.log(await filehandle.readFile({ encoding: 'utf8' }))
} finally {
await fileHandle.close()
}
}
run().catch(console.error)
util.promisify 예시
다음은 util.promisify
를 사용하여 fs.open
을 프로미스 기반 함수로 변환하는 예시입니다.
const fs = require('node:fs')
const util = require('node:util')
const open = util.promisify(fs.open)
open('test.txt', 'r')
.then(fd => {
// 파일 디스크립터 사용
})
.catch(err => {
// 에러 처리
})
fs/promises
모듈에 대한 자세한 내용은 fs/promises API 문서를 확인하십시오.