码迷,mamicode.com
首页 > 系统相关 > 详细

Linux文件操作

时间:2016-08-06 21:51:51      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:

一、文件的系统调用
1.文件描述符
  文件描述符是一些小数值,你可以通过它们访问的打开的文件设备,而有多少文件描述符可用取决于系统的配置情况。但是当一个程序开始运行时,

它一般会有3个已经打开的文件描述符,就是

0:标准输入
1:标准输出
2:标准错误

  这些数字就是文件描述符,因为在Linux上一切都是文件,所以标准输入(stdin)、标准输出(stdout)和标准错误(stderr)也可看作文件来对待。
2.系统调用常用函数 (头文件<fcntl.h>、<unistd.h>)
  1) open
  函数原形

int open(const char *path, int oflags);
int open(const char *path, int oflags, mode_t mode);

  path:包括路径的完整文件名,如(/home/maxin/);

  oflags:文件访问模式, 如(O_RDONLY、O_WRONLY);

  mode:用于设定文件的访问权限,如(0666)。

  open建立了一条到文件或设备的访问路径,如果调用成功,返回一个可以被read、write等其他系统调用的函数使用的文件描述符,而且这个文件描述是唯一的,不与任何其他运行中的进程共享,在失败时返回-1,并设置全局变量errno来指明失明的原因。
  2) write
  函数原型

size_t write(int fildes, const void *buf, size_t nbytes);

  write的作用是把缓冲区buf的前nbytes个字节写入到文件描述符fildes关联的文件中,返回实际写入的字节数。返回0表示没有写入任何数据,返回-1表示调用中出现了错误,错误代码保存在errno中。
  注:fildes一定要是在open调用中返回的创建的文件描述符,或者是0、1、2等标准输入、输出或标准错误。
  3) read
  函数原型

size_t read(int fildes, void *buf, size_t nbytes);

  read系统调用的作用是从与文件描述符相关的文件里读入nbytes个字节的数据,并把它们放到数据区buf中,返回读入的字节数,失败时返回-1。
  4) close
  函数原型
  int close(int fildes);
  close函数的作用是终于文件描述符fildes一其对应的文件之间的关联。
3.示例:文件copy

 1 #include <stdio.h>
 2 #include <assert.h>
 3 #include <string.h>
 4 #include <fcntl.h>    
 5 #include <unistd.h>
 6 
 7 int main(int argc, char * argv[])
 8 {
 9     int fpr, fpw, res;
10     int buf[100];
11     // 打开文件
12     fpr = open(argv[1], O_RDONLY, 0600);
13     fpw = open(argv[2], O_WRONLY|O_CREAT, 0600);
14     assert(fpr != -1 && fpw != -1);
15     // 文件copy
16     memset(buf, 0, sizeof(buf));
17     while((res = read(fpr, buf, 100)) > 0)
18     {
19         write(fpw, buf, res);
20     }
21     // 关闭文件
22     close(fpw);
23     close(fpr);
24     return 0;
25 }

二、标准I/O库
  在标准I/O库中,与底层文件描述符相对应的是流,它被实现为指向结构FILE的指针。
1.I/O常用库函数
  1)fopen库函数
  函数原形

FILE* fopen(const char *filename, const char *mode);

  它与底层系统调用open类似,成功时返回一个非空指针。失败时返回NULL。
  2)fread库函数
  函数原型

size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);

  它与底层调用read相似,其作用是从stream读取nitems个长度为size的数据到ptr所指向的缓冲区中。返回值是成功读到缓冲区中的记录个数。
  3)fwrite库函数
  函数原型

size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream);

  它与底层调用write相似,其作用是从ptr指向的缓冲区中读取nitems个长度为size到数据,
  并把它们写到stream所对应的文件中。
  4)fclose库函数
  函数原型

int fclose(FILE *stream);

  它与系统调用close相似,其作用是关闭指定的文件流stream。
2.示例:文件拷贝

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <assert.h>
 5 
 6 int main(int argc, char * argv[])
 7 {
 8     int buf[100];
 9     int res = 0;
10     FILE * fpr = NULL;
11     FILE * fpw = NULL;
12 
13     fpr = fopen(argv[1], "r");
14     fpw = fopen(argv[2], "w");
15     assert(fpr != NULL && fpw != NULL);
16             
17     memset(buf, 0, sizeof(buf));
18     while((res = fread(buf, sizeof(char), 100, fpr)) > 0)
19     {
20         fwrite(buf, sizeof(char), res, fpw);
21     }
22     fclose(fpr);
23     fclose(fpw);
24             
25     return 0;
26 }

 

Linux文件操作

标签:

原文地址:http://www.cnblogs.com/maxin/p/5744834.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!