系統(tǒng)之家 - 系統(tǒng)光盤下載網(wǎng)站!

當前位置:系統(tǒng)之家 > 系統(tǒng)教程 > Linux中文件I/O操作

Linux下文件I/O操作的相關(guān)知識(2)

時間:2014-12-26 15:58:35 作者:qipeng 來源:系統(tǒng)之家 1. 掃描二維碼隨時看資訊 2. 請使用手機瀏覽器訪問: https://m.xitongzhijia.net/xtjc/20141226/33535.html 手機查看 評論

  代碼如下:

  #include《unistd.h》 //《unistd.h》必須最早出現(xiàn),因為它可能會影響到其他頭文件。#include《stdio.h》

  #include《fcntl.h》

  #include《string.h》

  #include《errno.h》

  int main()

  {

  char* filename = “。//file”;

  char buf[100];

  char buf1[5];

  int fd;

  printf(“open a file to write\n”);

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

  {

  perror(“cannot open file\n”);

  return 1;

  }

  printf(“open file successfully!\n”);

  printf(“input a string:”);

  gets(buf);

  //write intofile

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

  {

  perror(“cannot write intofile\n”);

  return 1;

  }

  close(fd);

  printf(“open file to read.\n”);

  if((fd=open(filename,O_RDONLY)) == -1)

  {

  perror(“cannot open thefile.\n”);

  return 1;

  }

  if(lseek(fd,3,SEEK_SET) == -1)

  {

  perror(“lseek erroe\n”);

  return 1;

  }

  //read from the file

  if(read(fd,buf1,4)==-1)

  {

  perror(“read error.\n”);

  return 1;

  }

  printf(“read from file is%s\n”,buf1);

  close(fd);

  return 0;

  }

  執(zhí)行與輸出結(jié)果:

  代碼如下:

  root@jb51:~$gcc -o io io.c

  root@jb51:~$./io

  open a file towrite

  open filesuccessfully!

  input a string:akxivbaslzkncxcasbxbwwvaidxbd

  open file toread.

  read from fileis ivba

  linux 文件I/O教程(2)

  下面介紹了linux中有關(guān)文件I/O的相關(guān)內(nèi)容,內(nèi)核使用三種數(shù)據(jù)結(jié)構(gòu)表示打開的文件,他們之間的關(guān)系決定了在文件共享方面一個進程對另一個進程可能產(chǎn)生的影響。

  一,文件共享

  內(nèi)核使用三種數(shù)據(jù)結(jié)構(gòu)表示打開的文件,他們之間的關(guān)系決定了在文件共享方面一個進程對另一個進程可能產(chǎn)生的影響。

  1) 每個進程在進程表中都有一個記錄項,記錄項中包含一張打開文件描述表,可將其視為一個矢量,每個描述符占用一項。與每個文件描述符相關(guān)聯(lián)的是:

  a) 文件描述符標志

  b) 指向一個文件表項的指針

  2) 內(nèi)核為所有打開文件維持一張文件表。每個文件表項包含:

  a) 文件狀態(tài)標志(讀、寫、讀寫、添些、同步和阻塞等)

  b) 當前文件偏移量

  c) 指向文件v節(jié)點表項的指針

  3) 每個打開文件(或設備)都有一個v節(jié)點(v-node)結(jié)構(gòu)。v節(jié)點包含了文件類型和對比文件進行各種操作的函數(shù)的指針。對于大多數(shù)文件,v節(jié)點還包含了該文件的i節(jié)點。i節(jié)點包含文件所有者、文件長度、文件所在的設備、指向文件實際數(shù)據(jù)塊在磁盤上所在位置的指針等。

  打開文件的內(nèi)核數(shù)據(jù)結(jié)構(gòu)

  如果兩個進程各自打開了同一個文件,則如圖2所示。假定第一個進程在文件描述符3打開上該文件,而另一個進程在文件描述符4上打開該文件。每個進程都得得到一個文件表項,但對一個給定的文件只有一個v節(jié)點表項。每個進程都有自己的文件表項的一個理由是:使每個進程都有自己對該問價的當前偏移量。

發(fā)表評論

0

沒有更多評論了

評論就這些咯,讓大家也知道你的獨特見解

立即評論

以上留言僅代表用戶個人觀點,不代表系統(tǒng)之家立場

其他版本軟件

熱門教程

人氣教程排行

Linux系統(tǒng)推薦

官方交流群 軟件收錄