在C库里面的IO函数在底层也是通过调用系统的IO函数来实现的。因为在系统IO函数里面是通过fd(文件描述符)实现的,所以在C库里面是将fd(文件描述符)进行了封装。
在C库函数向显示器输出的时候是行缓冲,但是在向文件输出的时候是全缓冲,因为在系统提供的函数里面是没有自带缓冲区的,所以在C库函数封装的时候提供的。
int main()
{
char * buf = "haha\n";
fwrite(buf,strlen(buf),1,stdout);
fork();
return 0;
}
结果是:
再将上面的结果重定向之后./a.out > hehe.txt
结果是:
注:在这里当输出是输出到屏幕的时候是行缓冲,但是在重定向之后就将行缓冲变成了全缓冲,所以当执行fork之前不一定会将输出数据输出,有可能在fork之后,而在fork之后含有一个子进程,子进程包含的缓冲数据和父进程一样,所以在这里面就会在文件里面输出两个相同的数据。
文件系统:
超级快:存放文件系统的信息
i结点表:存放文件的基本信息
数据区:存放数据内容
inode
结构:
在linux里面每个问价 都对应这一个inode
号,在系统区别文件的时候也是依靠inode
号来实现区分的,在这个inode
里面保存这文件系统的基本信息,除开文件名。
显示inode
信息:stat filename
显示inode
号和文件名:ls -i filename
显示inode
总数和已使用inode数:df -i
在系统里面打开一个文件是通过一个叫目录文件来寻找的,这个目录文件的里面含有所有文件的inode
和文件名,在需要访问文件信息的时候就会进入inode
里面将文件的信息输出。
如图:
硬链接:
使用in filename1 filename2
可以将filename1
和filename2
硬链接起来。
在底层可以发现,实现硬链接的两个文件的inode
号会一样的,那么就可以得出结论,在实现硬链接的时候其实是将两个文件公用一个inode
号。
软连接:
软连接ln -s filename1 filename2
是创建一个新的文件,访问这个文件的时候就会通过连接去访问原始文件。