在操作系统级别想要将某些内容写入文件时会发生什么?任何操作系统都没问题但是我对Linux很熟悉,所以如果有人在Linux上给我答案那就太好了。
我知道在下面用C语言打开文件时会发生的一些事情是我的粗略代码。
FILE *fp;
fp = fopen("/tmp/test.txt", "w+");
fputs("This is testing for fputs...\n", fp);
答案 0 :(得分:6)
接下来,调用sys_write
内核函数。请下载Linux kernel来源的副本,并查看它。您正在SYSCALL_DEFINE3(write...
中寻找fs/read_write.c
。
sys_write
会调用fdget
基本上获得struct file*
指针,并调用vfs_write
(在同一文件中)。
请记住,write
是一个非常通用的系统调用,它允许您将数据写入任何打开的文件描述符(根本不是磁盘上的文件)。在struct file*
中是指向许多函数指针的指针(f_op
)。由于"文件"这是一个完全通用的东西,这些函数指针是知道如何进行实际编写的,具体取决于文件的类型。这提供了一种"多态性",但是在普通的C代码中。因此vfs_write
会调用file->f_op->write()
。
这些调用将逐步进入文件系统层(在fs/
目录中)。同样,这取决于您安装的文件系统(例如ext3
,nfs
等)。
最终,它们将向下到块设备层,这是块数据到真实硬件的原始读/写操作完成的地方。同样,这取决于您连接的设备(例如PATA,SATA / SCSI,RAID,USB,网络......)
设备驱动程序是进行实际与硬件通信的地方。这是发生任何DMA或内存映射I / O的地方。
最好用good book来描述。