esw*_*aat 3 c linux file-io operating-system
在操作系统级别发生什么事情,想要将某些内容写入文件?任何操作系统都没问题,但我对Linux很熟悉,所以如果有人在Linux上给我答案那就太好了.
我知道在下面用C语言打开文件时会发生的一些事情是我的粗略代码.
FILE *fp;
fp = fopen("/tmp/test.txt", "w+");
fputs("This is testing for fputs...\n", fp);
Run Code Online (Sandbox Code Playgroud)
接下来,sys_write调用内核函数.去下载Linux内核源代码的副本,并查看它.您正在寻找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的地方.
| 归档时间: |
|
| 查看次数: |
724 次 |
| 最近记录: |