linux中一切皆文件
,socket,磁盘,线程,显示器,键盘等操作都是进行文件的操作.
文件类型 | 标记符 |
---|---|
目录(directory) | d |
字符设备(character) | c |
块设备(block) | b |
套接字(socket) | s |
管道(pipe) | p |
链接文件(link) | l |
linux一个进程启动后,在内存中创建PCB控制块,其中维护一个文件描述符表(File descriptor table).
filedescriptor | POSIX表示 | 标准io表示 | 描述 |
---|---|---|---|
0 | STDIN_FILENO | stdin | 标准输入(默认指向键盘) |
1 | STDOUT_FILENO | stdout | 标准输入(默认指向显示器) |
2 | STDERR_FILENO | stderr | 标准错误(默认指向显示器) |
3 | 其他 | 其他 | 其他 |
当我们使用open
函数时,就是将除0,1,2
之外的描述符(一般都是递增)对应的指针,指向了要打开的文件.
在shell重定向中,默认标准输出1
(代码中的echo或者print())和错误信息2
文件描述符指向的是显示器.
./test.sh 1>log 2>&1
,我们将文件描述符1
(本来指向显示器)指向了名称为log
的文件,然后将文件描述符2
指向了文件描述1
,最终也输入到了log文件里.
参考:
https://www.jianshu.com/p/504a53c30c17
http://c.biancheng.net/view/3066.html