Linux文件编程之--库函数pk系统调用函数

系统调用open() ,read(),write(),lseek();

库函数fopen(), fread(),fwrite(),flseek();

库函数

1.fopen()函数

函数功能

打开文件

头文件

#include<stdio.h>

函数原型

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

参数说明

§path:欲打开的文件路径与文件名

§mode:打开方式:

r:以只读方式打开文件

r+:以可写可读方式打开文件

w:以只写方式打开文件

w+”:以可读可写的方式打开文件,若文件不存在则建立文件

a:以追加的方式打开文件,若文件不存在则建立文件;

若文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。

a+”:相对“a”功能的基础上,以追加方式打开可读可写的文件。

返回值

文件打开成功,返回文件指针;

文件打开失败,则返回NULL,并把错误码存在errno

范例:

#include<stdio.h>

Main()

{

FILE *fp;

fp=fopen(“hell.txt”,”a+”);

if(fp==NULL)

return:

fclose(fp);

}

1.open()函数

所需头文件

#include <sys/types.h>

#include <sys/stat.h >

#include <fcntl.h>

函数原型

1Intopen(const char *pathname,int flags);

2Intopen(const char *pathname, int flags, mode_t mode );

区别flag使用了O_CREAT标志,则使用第二种形式,这时需要mode来指定访问权限

函数传入值

Pathname

§Pathname:要打开的文件路径和文件名

§flags:打开方式,必须从下面三个中选一个:

O_RDONLY:只读模式;

O_WRONLT:只写模式

O_RDWR:读写模式;

§flags:另外,还可以附加选项,通过与上面3个选项通过”|”连接

O_APPEND:每次写操作都写入文件的末尾;

O_CEAT:如果指定文件不存在,则创建这个文件;

O_EXCL:如果要创建的文件已存在,则返回-1,并且修改errno的值,需要与O_CREAT配对使用以确保文件是新建的。

O_TRUNC:如果文件存在,并且以只写/读写方式打开,则清空文件全部内容(即长度截短为0)。

O_NOCTTY:如果路径名指向终端设备,不要把这个设备用作控制中端;

函数返回值:成功返回文件描述符;失败返回:-1

范例:

#include<unistd.h>

  #include<sys/types.h>

  #include<sys/stat.h>

  #include<fcntl.h>

  main()

  {

  int fd,size;

  char s [ ]=”Linux Programmer!\n”,buffer[80];

  fd=open(“/tmp/temp”,O_WRONLY|O_CREAT);

  write(fd,s,sizeof(s));

  close(fd);

  fd=open(“/tmp/temp”,O_RDONLY);

  size=read(fd,buffer,sizeof(buffer));

  close(fd);

  printf(“%s”,buffer);

  }

2.fseek()函数

函数功能

移动文件流的读写位置

头文件

#include<stdio.h>

函数原型

Int fseek(FIEL * stream , long offset , int origin)

参数说明

§stream:文件指针

§offset:偏移量,正数表示正向偏移,负数表示负向偏移

§origin:设定从文件的哪里开始偏移,可能取值为:

SEEK_SET:文件开头

SEEK_CUR:当前位置

SEEK_END:文件结尾

返回值

成功,返回0;失败,返回-1

范例:

#include<stdio.h>

Long filesize(FILE *stream)

{

FILE *stream;

Stream=fopen(“MYFILE.txt”,“w+);

fprintf (stream ,this is a test);

printf(“filesize ofMYFILE.txtis %ldbytes\n” ,filesize(stream) );

return 0;

}

Long filesize(FILE *stream)

{

Longcurpos ,length;

Curpos=ftell(stream);

Fseek(stream, 0L ,SEEK_END);

Length=ftell(stream);//*ftellfd)求文件总长度

fseek=(stream ,curpos ,SEEK_SET);

returnlength;

}

2.lseek()函数

函数功能

移动文件读写指针

头文件

#include <sys/types.h>

#include <unistd.h>

函数原型

Off_t lseek(int fd, off_t offset, int whence)

参数说明

§Fd:文件描述符

§offset:偏移量,正数表示正向偏移量,负数表示负向偏移量

§whence:设定从文件的哪里开始偏移,可取值为:

SEEK_SET:文件开头

SEEK_CUT:当前位置

SEEK_END:文件结尾

(其中SEEK_SETSEEK_CUTSEEK_END0,12

返回值

当调用成功则返回目前的读写位置相对头文件的偏移量,(即距文件开头多少字节,若有错误则返回-1errno会存放错误代码)

范例

1.欲将读写位置移到文件开头时:

lseek(int fd, 0, SEEK_SET)

2.欲将读写位置移到文件结尾时:

lseek(int fd, 0, SEEK_CUT)

3.欲将读写位置移到当前位置时:

lseek(int fd, 0, SEEK_END)

3.fread()函数

函数功能

从一个流中读数据

头文件

#include<stdio.h>

函数功能

Intfread(void *ptr ,int size ,int nitems, FILE *stream)

函数说明

§ptr:用于接收数据的地址(指针)

§size:每个字段中所含字节数

§nitems:要读取的总字段数;

§stream:提供数据的文件指针

返回值

成功返回读取的元素个数

范例:

3.read()函数

函数功能

由打开的文件读写数据

头文件

#include <unistd.h>

函数原型

Ssize_t read(int fd, void *buf , size_t count)

参数说明

§fd:文件描述符

§buf:存放读取数据的缓冲区

§count:读取的最大长度(字节数)

返回值

成功返回实际读取的字节数,失败返回-1

4.write()函数

函数功能

向文件写入一个数据块

函数原型

Ssize_t write(int fd ,const void *buf ,size_t count)

参数说明

§fd:文件描述符

§buf:写入数据的缓冲区

§count:写入数据的最大长度(总字节数)

返回值

成功返回实际写入字节数,当有错误发生时则返回-1,错误代码存入errno

4.fwrite()函数

函数功能

向文件写入一个数据块

头文件

#include<stdio.h>

函数功能

Intfwrite(const void* buffer ,size_t size , size_t count, FILE *stream)

函数说明

§ptr:用于输入的数据的地址(指针)

§size:每个字段中所含字节数

§nitems:要读取的总字段数;

§stream:提供数据的文件指针

返回值

成功返回写入的元素个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值