macOS ํ๊ฒฝ์์ ์์ฑ๋ ๊ธ์ ๋๋ค.
File Descriptor ์ ์
UNIX ๊ณ์ด์ ์ด์์ฒด์ ๋ ์์คํ
์ ๋ชจ๋ ๊ฒ์ ํ์ผ๋ก ๊ฐ์ฃผํ๋ค.
์ด๋ ํ์ผ๋ฟ๋ง ์๋๋ผ ์ฅ์น(device), ์์ผ, ํ์ดํ ๋ฑ ๋ชจ๋ ๊ฒ์ ํ์ผ ํํ๋ก ๋ค๋ฃฌ๋ค๋ ์๋ฏธ์ด๋ค.
File Descriptor
๋ ์ด๋ฌํ ํ์ผ๋ค์ ๋ค๋ฃจ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ถ์ํ๋ ๊ฐ๋
์ธ๋ฐ, ์์คํ
์ด ์์์ ํ ๋นํด์ค ์ ์ ๊ฐ์ผ๋ก ์ฌ์ฉ๋๋ค.
File Descriptor ์์
๋ํ์ ์ธ fd์ ์์๊ฐ ํ์ค ์ /์ถ๋ ฅ๊ณผ ์๋ฌ์ด๋ค. ์ด 3๊ฐ์ง๋ ํ๋ก๊ทธ๋จ์ด ์์๋๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฆฌ๊ณ ์ข ๋ฃ๋๋ฉด ์๋์ผ๋ก ๋ซํ๋ค.
๋ถ๋ฅ | File Descriptor |
---|---|
ํ์ค ์ ๋ ฅ(stdin) | 0 |
ํ์ค ์ถ๋ ฅ(stdout) | 1 |
ํ์ค ์๋ฌ(stderr) | 2 |
node.js์์ ๋ค์ ์ฝ๋๋ก ํ์ธํด๋ณผ ์ ์๋ค.
console.log(process.stdin.fd); // 0
console.log(process.stdout.fd); // 1
console.log(process.stderr.fd); // 2
์ฝ๊ฒ ์๊ฐํ๋ฉด ์ฐ๋ฆฌ๊ฐ ํํ ์ฌ์ฉํ๋ ํ์ผ ๊ฒฝ๋ก
๋ฅผ ํตํด ์ ๊ทผํ๋ค๊ธฐ ๋ณด๋ค ํฌ์ธํฐ์ฒ๋ผ ์ฃผ์๋ฅผ ์ฐธ์กฐ
ํ๋ค๊ณ ๋ณผ ์ ์๋ค.
๋๋ฌธ์ node.js์ fs.readFile ํจ์์์๋ ํ์ผ ๊ฒฝ๋ก ๋์ fd ๊ฐ์ผ๋ก ํ์ผ์ ๋ค๋ฃฐ ์ ์๋ค.
// README.md
# Hello World
// index.js
import fs from 'node:fs';
fs.open('./README.md', 'r', (err, fd) => {
console.log(fd) // 24;
// fs.readFile์ ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋
// ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ string์ด๊ฑฐ๋, fd๋ฅผ ๋ํ๋ด๋ number
fs.readFile(fd, (err, data) => {
console.log(data.toString()); // # Hello World
fs.close(fd);
});
// fd๋ ์์๋๋ก ๋๋ฒ๋ง๋๋ค.
fs.open('./new-file.md', 'w', (err, newFd) => {
console.log(newFd); // 25
})
});
File Descriptor์ Socket
์
์ถ๋ ฅ ๋์์ด ๋ฐฉ๊ธ๊น์ง ์ดํด๋ณธ ์ฝ์์ด๋ ํ์ผ์ด ์๋๋ผ ์ธํฐ๋ท์ด ๋๋ฉด
ํ์ผ๊ณผ ๋ฌ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋์์ด ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์๊ธฐ ๋๋ฌธ์ ์ํํธ์จ์ด ์ฐจ์์์ ํธ์คํธ๋ค๊ฐ ์ฐ๊ฒฐ์ ํด์ฃผ๋ ์ฅ์น๊ฐ ํ์ํ๋ค.
๊ทธ ์ฅ์น๊ฐ ๋ฐ๋ก ์์ผ
์ด๋ค. ๊ทธ๋์ ์ผ๋ฐ์ ์ผ๋ก ์์ผ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ์ ์๋ฏธ๋ก ์ฌ์ฉ๋๋ค.
์์ ์ธ๊ธํ๋ฏ์ด ์์ผ๋ ํ์ผ๋ก ๊ฐ์ฃผ๋๋ฏ๋ก ์์ผ์ ์์ฑํ์ ๋ ์ญ์ fd๊ฐ ํ ๋น๋๋ค.
(๋คํธ์ํฌ ํต์ ์ ์ํ ์ธํฐํ์ด์ค์ด๋ฏ๋ก ์์ผ์ด ์์ฑ๋๋คํด์ ํ์ผ์ฒ๋ผ ๋์คํฌ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ ์ฅ๋์ง ์๋๋ค.)
import net from 'node:net';
const netServer = net.createServer().listen(4000, () => {
console.log(netServer._handle.fd); // ์์ฑ๋ TCP ํน์ IPC ์์ผ์ fd
});
import dgram from 'node:dgram';
const dgramServer = dgram
.createSocket('udp4')
.on('listening', function () {
console.log(dgramServer._handle.fd); // ์์ฑ๋ UDP ์์ผ์ fd
})
.bind(4001);