“一切皆文件”
在linux开发过程中,相信大家都听过一句话叫作“limux下,一切皆文件”。这句话是linux/unix的哲学核心思想,下面我们就针对这句话给大家进行展开解释下。
这句话中的“文件”不仅仅是我们通常所指的文件,在linux和unix中它代表的更为宽泛。目录、字符设备、块设备、 套接字、进程、线程、管道等都被视为是一个“文件”,那么既然这样当我们建立一个文件时,我们如何来操作一个已经打开文件呢?
文件描述符(file descriptor),简称fd
这里就使用到了“文件描述符”,它是一个对应某个已经打开的文件的索引(非负整数)。下图表述了一个文件描述符的意义,
其中每一个文件描述符都是一个问文件的索引,当然也可以出现多个不同的文件描述符索引同一个文件。在linux系统中,0是标准输入的文件描述符,stdin。1是标准输出的文件描述符,stdout。2是标准错误输出的文件描述符,stderr。
-
//test.cpp关于标准文件描述符的测试
-
#include<unistd.h>//这是系统调用read和write和头文件
-
#include<string.h>
-
int main()
-
{
-
char *t =
new
char[
10];
-
read(
0, t,
10);
//从标准输入(键盘)读取10个字节长度放入t中
-
write(
1, t,
strlen(t));
//将t中的前10个字节内容写出到标准输出(屏幕)上
-
return
0;
-
}
g++ -o test test.cpp
./test
其中第一个行的”ertewtr”是read系统调用我们输入的,第二行的”ertewtr”是write系统调用写到屏幕上的。