Chinaunix首页 | 论坛 | 博客
  • 博客访问: 371136
  • 博文数量: 50
  • 博客积分: 1495
  • 博客等级: 上尉
  • 技术积分: 805
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-21 14:19
文章分类

全部博文(50)

文章存档

2011年(47)

2010年(3)

分类: LINUX

2011-03-31 16:06:04

004_文件和目录


文件IO

文件描述符:对于内核而言,所有打开的文件都由文件描述符引用。文件描述符是一个非负整数

Open函数返回的一定是最小的未用描述符数字,这句话不难理解吧。


IO效率

在使用readwrite系统调用时,选取BUFSIZE等于8192时效率达到最优。

 

文件共享

 

进程表项包含了文件描述符标志和志向一个文件表项的指针。

文件表项包含了文件状态标志,当前位移量和指向文件V节点表项的指针。

V节点包含了文件类型和对此文件进行各种操作的函数的指针信息。

V节点还包含了i节点,i节点包含了文件的所有者,文件长度等等。

 

lseek函数值修改了文件表项中的当前文件位移量,没有进行人任何IO操作。

 

 

dup() dup2()

使用这两个函数,共享了一个文件表项。

 

fcntl()函数

可以改变已经打开文件的性质。

 

Ioctl()函数

IO操作的杂物箱,不能用本章中其他函数表示的IO操作通常都能用ioctl表示。所以功能很强大。

 

 

 下面是一个简单的练习,将file1中的内容复制到file2中:

  1. #include "com_head.h"  /*一些常用的头文件*/
  2. #include <stdlib.h>
  3. #define BUF_SIZE     10

  4. int main(int argc, char *argv[])
  5. {
  6.     int fd_src, fd_dist;
  7.     char buf[BUF_SIZE];
  8.     int count;
  9.     int ret;

  10.     if (argc != 3)
  11.     {
  12.         fprintf(stderr, "Usage: argv[0] file1 file2\n");
  13.         exit(EXIT_FAILURE);
  14.     }

  15.     /*可读方式打开文件*/
  16.     if ((fd_src = open(argv[1], O_RDONLY)) == -1)
  17.     {
  18.         perror("fd_src open()");
  19.         exit(EXIT_FAILURE);
  20.     }

  21.     /*可读写,可追加的方式打开文件*/
  22.     if ((fd_dist = open(argv[2], O_RDWR | O_CREAT | O_APPEND, 0644)) == -1)
  23.     {
  24.         perror("fd_dist open()");
  25.         close(fd_src);
  26.         exit(EXIT_FAILURE);
  27.     }

  28.     /*把fd_src所代表的文件中内容写到fd_dist所代表的文件中去*/
  29.     while ((count = read(fd_src, buf, BUF_SIZE)) > 0)
  30.     {
  31.         ret = write(fd_dist, buf, count);
  32.         if (ret != count)
  33.         {
  34.             printf("read error!\n");
    1.        close(fd_src);
    2.           close(fd_dist);
  35.             exit(EXIT_FAILURE);
  36.         }
  37.     }
  38.     close(fd_src);
  39.     close(fd_dist);
  40.     exit(EXIT_SUCCESS);
  41. }

 

水平有限,如果有错误的地方,请指正,thanks

cjok.liao@gmail.com


 

 

 

阅读(1653) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~