Linuxの低レイヤーでよく見かけるファイルディスクリプタ(fd)についてお勉強。
ファイルディスクリプタとは
ファイルディスクリプタとは、
開かれているファイルを表すユニークな数字のこと。
また、特別なファイルディスクリプタである0, 1, 2には名前が付けられている。
file descriptor | name |
---|---|
0 | standard input |
1 | standard output |
2 | standard error |
2>&1のようなリダイレクトで使われている数字は上記のファイルディスクリプタのこと。
ファイルディスクリプタの生成
プロセスがファイルをオープンするとカーネルはfdを返す。
fdはGlobal file tableのエントリを示しており、
Global file tableのエントリはそのファイルのinode、バイトオフセット、データストリームのアクセス制限情報を含んでいる。
ファイルディスクリプタを取得する
Go言語でファイルディスクリプタを取得するプログラムを作った。
package main
import (
"fmt"
"os"
)
func main() {
// open a file
f, err := os.Open("./main.go")
if err != nil {
fmt.Println(err)
}
// get a file descriptor
fmt.Println("fd:", f.Fd())
}
❯ go run main.go
fd: 3