2024年11月Linux下文件I/O操作的相关知识(2)

发布时间:

  ⑴#include《unistd.h》 //《unistd.h》必须最早出现,因为它可能会影响到其他头文件。#include《stdio.h》

  ⑵#include《ftl.h》

  ⑶#include《string.h》

  ⑷#include《errno.h》

  ⑸int main(

  ⑹char* filename = “。//file”;

  ⑺char buf[];

  ⑻char buf[];

  ⑼printf(“open a file to write

  ⑽if((fd = open(filename,O_RDWR|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH ==-

  ⑾perror(“cannot open file

  ⑿return ;

  ⒀printf(“open file suessfully!

  ⒁printf(“input a string:”;

  ⒂gets(buf;

  ⒃//write intofile

  ⒄if(write(fd,buf,strlen(buf !=strlen(buf

  ⒅perror(“cannot write intofile

  ⒆return ;

  ⒇close(fd;

  ⒈printf(“open file to read.

  ⒉if((fd=open(filename,O_RDONLY == -

  ⒊perror(“cannot open thefile.

  ⒋return ;

  ⒌if(lseek(fd,,SEEK_SET == -

  ⒍perror(“lseek erroe

  ⒎return ;

  ⒏//read from the file

  ⒐if(read(fd,buf,==-

  ⒑perror(“read error.

  ⒒return ;

  ⒓printf(“read from file is%s

  ⒔close(fd;

  ⒕return ;

  ⒖执行与输出结果:

  ⒗rootjb:~$g -o io io.c

  ⒘rootjb:~$./io

  ⒙open a file towrite

  ⒚open filesuessfully!

  ⒛input a string:akxivbaslzkncxcasbxbwwvaidxbd

  ①open file toread.

  ②read from fileis ivba

  ③linux 文件I/O教程(

  ④下面介绍了linux中有关文件I/O的相关内容,内核使用三种数据结构表示打开的文件,他们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。

  ⑤内核使用三种数据结构表示打开的文件,他们之间的关系决定了在文件共享方面一个进程对另一个进程可能产生的影响。

  ⑥ 每个进程在进程表中都有一个记录项,记录项中包含一张打开文件描述表,可将其视为一个矢量,每个描述符占用一项。与每个文件描述符相关联的是:

  ⑦a 文件描述符标志

  ⑧b 指向一个文件表项的指针

  ⑨ 内核为所有打开文件维持一张文件表。每个文件表项包含:

  ⑩a 文件状态标志(读、写、读写、添些、同步和阻塞等

  Ⅰb 当前文件偏移量

  Ⅱc 指向文件v节点表项的指针

  Ⅲ 每个打开文件(或设备都有一个v节点(v-node结构。v节点包含了文件类型和对比文件进行各种操作的函数的指针。对于大多数文件,v节点还包含了该文件的i节点。i节点包含文件所有者、文件长度、文件所在的设备、指向文件实际数据块在磁盘上所在位置的指针等。

  Ⅳ打开文件的内核数据结构

  Ⅴ如果两个进程各自打开了同一个文件,则如图所示。假定第一个进程在文件描述符打开上该文件,而另一个进程在文件描述符上打开该文件。每个进程都得得到一个文件表项,但对一个给定的文件只有一个v节点表项。每个进程都有自己的文件表项的一个理由是:使每个进程都有自己对该问价的当前偏移量。