Bootstrap

linux写文件,linux下文件的读写操作( open read write)

1. Linux系统调用,文件的描述符使用的是一个整数,库函数访问文件使用FILE类型的指针去指向描述文件;

2.

库函数不随系统平台而变,即不管win还是Linux都适用;

库函数-

读文件

size_t fread(void *ptr, size_t size, size_t n, FILE *stream)

功能:从stream指向的文件中读取n个字段,每个字段为size字节,并将读取的数据放入ptr所指向的字符数组中,返回实际已读取的字节数。(读出来的数据量为size*n)

库函数-

写文件

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

功能:从缓冲区ptr所指向的数组中把n个字段写到stream指向的文件中,每个字段长为size个字节,返回实际写入的字段数。

库函数-

创建和打开

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

filename:打开的文件名(包含路径,缺省为当前路径)

mode:打开模式

实例代码[email protected]:/home/wl/桌面/c++# cat -n file_lib_copy.cpp

1

2#include

3#include

4#include

5#define BUFFER_SIZE 1024

6

7/*

8 * 程序入口

9 * */

10int main(int argc,char **argv)

11{

12FILE *from_fd;

13FILE *to_fd;

14long file_len=0;

15char buffer[BUFFER_SIZE];

16char *ptr;

17

18/*判断入参*/

19if(argc!=3)

20{

21printf("Usage:%s fromfile tofile\n",argv[0]);

22exit(1);

23}

24

25/* 打开源文件 */

26if((from_fd=fopen(argv[1],"rb"))==NULL)

27{

28printf("Open %s Error\n",argv[1]);

29exit(1);

30}

31

32/* 创建目的文件 */

33if((to_fd=fopen(argv[2],"wb"))==NULL)

34{

35printf("Open %s Error\n",argv[2]);

36exit(1);

37}

38

39/*测得文件大小*/

40fseek(from_fd,0L,SEEK_END);

41file_len=ftell(from_fd);

42fseek(from_fd,0L,SEEK_SET);

43printf("form file size is=%d\n",file_len);

44

45/*进行文件拷贝*/

46while(!feof(from_fd))

47{

48fread(buffer,BUFFER_SIZE,1,from_fd);

49if(BUFFER_SIZE>=file_len)

50{

51fwrite(buffer,file_len,1,to_fd);

52}

53else

54{

55fwrite(buffer,BUFFER_SIZE,1,to_fd);

56file_len=file_len-BUFFER_SIZE;

57}

58bzero(buffer,BUFFER_SIZE);

59}

60fclose(from_fd);

61fclose(to_fd);

62exit(0);

63}

64

65

[email protected]:/home/wl/桌面/c++# g++ file_lib_copy.cpp -o file_lib_copy

file_lib_copy.cpp: 在函数‘int main(int, char**)’中:

file_lib_copy.cpp:43:41: 警告: 格式 ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat]

[email protected]:/home/wl/桌面/c++# ./file_lib_copy file_lib_copy.cpp test2.c

form file size is=1030

[email protected]:/home/wl/桌面/c++#

原文:http://blog.csdn.net/hongkangwl/article/details/21338121

;