Linux系统编程篇(文件)编程操作二 文件操作原理

Linux系统编程篇(文件)编程操作二 文件操作原理

文件描述符

  • 对于内核而言,所有打开文件操作都由文件描述符(非负整数)引用。当打开一个现存文件或者创建一个新文件时,内核相进程返回一个文件的一个描述符。读写文件时,用open和create返回的文件描述符标识该文件,作为参数传递给read和write。
int fd;
char buf[128];
char read[128];
fd=open("./file",ORDWR);
write(fd,buf,strlen(buf));
read(fd,readbuf,strlen(buf));
  • 按照惯例,UNIX shell使用
    文件描述符0(SDINJFILEN0)与进程的标准输入相结合,(键盘)
    文件描述符1(STDOUT_FILENO)与标准输出相结合,(shell打印输出)
    文件描述符2(STDERR_FILENO)与标准错误输出相结合。
int main()
{	
    char *buf=(char *)malloc(sizeof(128));
   // char  readbuf[128]; 
    read(0,buf,10);
    write(1,buf,strlen(buf));
    return 0;
}
  • 文件描述符,这个数字在一个进程中表示一个特定含义,当我们open一个文件时,操作系统在内存中构建了一些数据结构来表示这个动态文件,然后返回给应用程序一个数字作为文件描述符,这个数字就和我们内存中维护的这个动态文件的这些数据结构绑定上了,以后我们应用程序如果要操作这个动态文件,只文件描述符的作用域就是当前进程,出了这个进程文件描述符就没有意义了。

操作文件一般的步骤

  • 1.打开或者创建一个文件

  • 2.读取或者写入文件

  • 3.关闭文件(忘记关闭可能会造成文件的损坏)

  • 文件平时是存放在块设备中的文件系统文件中的,我们把这种交件叫静态文件,当我们去open打开一个文件时,linux内核做的操作包括:内核在进程中建立一个打开文件的数据结构,记录下我们打开的这个文件;内核在内存中申请一段内存,并且将静态文件的内容从块设备中读取到内核中特定地址管理存放。(叫动态文件)。打开文件以后,以后对这个文件的读写操作,都是针对内存中的这一份动态文件操作的,而并不是针对静态文件的。当然我们对动态文件进行读写以后,此时内存中动态文件和块设备文件中的静态文件就不同步了,当我们close关闭动态文件时,close内部内核将内存中的动态文件的内容去更新(同步)块设备中的静态文件。

文件平时存放(不操作时),是放在磁盘,当我们对它进行操作时,会拷贝一份静态文件作为动态文件,我们操作文件都是对动态文件来修改的。当修改完成时,关闭后,系统会会自动更新到静态文件中去。

在这里插入图片描述

CPU与内存间的工作关系为:

当我们在计算机上执行一个程序时,首先由输入设备向CPU发出操作指令,CPU接收到操作指令后,硬盘中对应的程序指令被直接加载到内存中,此后,CPU再对内存进行寻址操作,将加载到内存中的指令翻译出来,而后发送操作信号给操作控制器,实现程序的运行或数据的处理。


版权声明:本文为cheng166934原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。