Linux文件编程

目录

1、Linux系统提供的文件编程API

1.1打开文件:open

1.2创建文件creat函数

1.3写入文件write函数

1.4读取文件read函数

1.5文件光标位置lseek函数

2、另外一组文件编程API

 2.1文件打开函数fopen

2.2读文件函数fread

2.3写文件函数fwrite

2.4文件光标位置函数fseek 

2.4文件关闭函数fclose

 2.5fgetc函数

1、Linux系统提供的文件编程API

打开        open

读写        write/read

光标定位        lseek

关闭        close  

1.1打开文件:open

函数原型:

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

参数一:pathname 要打开的文件名(含路径,缺省为当前路径)

参数二:flags 文件的打开方式,有以下选项

O_RDONLY 只读打开        O_WRONLY 只写打开        O_RDWR 可读可写打开

当我们附带了访问权限后,打开的文件就只能按照这种权限来操作

以上三个常数中应当只选定一个。下列常数是可以选择的(可一个可多个也可以不选择,用|隔开)

O_CREAT  若文件不存在则创建它。使用此选项时,需要同时说明第三个参数mode,用其说明该新文件的权限

O_EXCL  如果同时指定了O_CREAT,而文件已经存在,则函数值返回-1(可以和O_CREAT配合使用,用来判断文件是否存在)

O_APPEND  每次写时都加到文件的尾端

O_TRUNC  属性去打开文件时,如果这个文件中本来是有内容的,而且为只读或者只写成功打开,则长度截短为0(就是把里面的内容都删掉)

参数三:一定是在flags中使用了O_CREA标志,mode记录待创建的文件的访问权限

返回值:返回新的文件描述符(非负整数),如果发生错误则返回-1

1.2创建文件creat函数

1.3写入文件write函数

函数原型:

ssize_t write(int fd, const void *buf, size_t count);
参数一:文件描述符,由open或者creat函数返回

参数二:需要写入的数据指针

参数三:写入数据的长度

返回值:成功写入的字节数,如果出错则返回-1

1.4读取文件read函数

函数原型:

ssize_t read(int fd, void *buf, size_t count);

参数一:文件描述符,由open或者creat函数返回

参数二:读取到的数据存放的位置

参数三:读取数据的长度,指针偏移量,从光标的位置开始读buf个字节的数据

返回值:如果成功则返回读取到的字节数,返回0则表示光标位置在文件的尾,发生错误则返回-1

1.5文件光标位置lseek函数

函数原型:

off_t lseek(int fd, off_t offset, int whence);
参数一:文件描述符,由open或者creat函数返回

参数二:偏移量,正数向后偏移,负数向前偏移

参数三:偏移方式

SEEK_SET:光标位置为文件头,偏移量为参数二设置的偏移量

SEEK_CUR:偏移量为光标位置加上参数二设置的偏移量

SEEK_END:光标位置为文件尾,偏移量为文件大小加偏移量字节

返回值:返回光标偏移之后的位置,从文件头开始计算。如果发生错误则返回-1

1.6文件关闭close函数

函数原型:

int close(int fd);

参数一:文件描述符,由open或者creat函数返回

返回值:成功返回0,失败返回-1

标准输入0:读取键盘的输入:read

标准输出1:写到屏幕:write

标准错误输出0

在Linux文件可分为动态文件与静态文件,动态文件是我们打开的文件在缓冲区里面的文件,而静态文件存放在外存当中。调用close时就会将动态文件中的内容保存到磁盘的静态文件中。 

2、另外一组文件编程API

fopen、fread、fwrite、fseek、fclose、fgetc、fputc、feof

作用与上面的都差不多

 2.1文件打开函数fopen

fopen函数原型

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

参数一:filename -- 字符串,表示要打开的文件名称。

参数二:mode -- 字符串,表示文件的访问模式

返回值:该函数返回一个 FILE 指针。否则返回 NULL,且设置全局变量 errno 来标识错误

2.2读文件函数fread

fread函数原型

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

参数一:ptr -- 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。读取文件的存放位置

参数二:size -- 这是要读取的每个元素的大小,以字节为单位。

参数三:nmemb -- 这是元素的个数,每个元素的大小为 size 字节。

参数四:stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流。

返回值:成功读取的元素总数会以 size_t 对象返回,size_t 对象是一个整型数据类型。如果总数与 nmemb 参数不同,则可能发生了一个错误或者到达了文件末尾。

2.3写文件函数fwrite

fwrite函数原型

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

参数一:ptr -- 这是指向要被写入的元素数组的指针。

参数二:size -- 这是要被写入的每个元素的大小,以字节为单位。

参数三:nmemb -- 这是元素的个数,每个元素的大小为 size 字节。

参数四:stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输出流

返回值:如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。

2.4文件光标位置函数fseek 

fseek函数原型

int fseek(FILE *stream, long int offset, int whence)

参数一:stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了流。

参数二:offset -- 这是相对 whence 的偏移量,以字节为单位。

参数三:whence -- 这是表示开始添加偏移 offset 的位置,其参数与lseek函数的whence一样

返回值:如果成功,则该函数返回零,否则返回非零值。

2.4文件关闭函数fclose

fclose函数原型

int fclose(FILE *stream)

stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了要被关闭的流。

返回值:如果流成功关闭,则该方法返回零。如果失败,则返回 EOF

 2.5fgetc函数

作用:从指定的流 stream 获取一个字符(一个无符号字符),并把位置标识符往前移动

函数原型:

int fgetc(FILE *stream)

参数一:tream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要在上面执行操作的流

返回值:该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或

发生读错误,则返回 EOF。

3、fopen与open的区别

fopen与open的区别

fopen

  • 语言: fopen 是标准C库中的函数,用于在C语言中打开文件。
  • 用途: fopen 主要用于打开文件以供读取或写入。它返回一个指向 FILE 结构的指针,该结构包含有关文件的信息。

open

  • 语言: open 是Unix/Linux系统中的系统调用,用于在低级别(更接近硬件)上打开或创建文件。
  • 用途: open 可以用于在文件系统中打开或创建文件,并返回文件描述符(file descriptor),而不是 FILE 结构。

 总体而言,fopen 更加抽象和易用,适用于C语言中的文件操作;而 open 更底层,直接与文件描述符交互,适用于Unix/Linux系统编程。在一般情况下,如果你在C语言中进行文件操作,推荐使用 fopen。如果你在进行系统级别的编程,可能会使用 open 以及其他底层的系统调用。

4、dup对文件描述符的操作

函数作用:复制文件描述符,就是两个文件句柄指向同一个文件描述符,这两个文件句柄共享文件偏移地址、状态

我们使用open函数的时候打开同一个文件,返回两个不同的文件句柄,两个文件句柄指向内核中的两个不同的文件描述符(file结构体),这两个文件句柄有着独立的文件偏移地址、状态

函数介绍

函数原型:int dup(int oldfd);

函数返回的文件句柄是“未使用的最小文件句柄”

函数原型:int dup2(int oldfd ,int newfd);

函数返回的文件句柄是newfd,如果文件句柄newfd已经被打开系统将会自动将其先关闭,然后再进行复制文件描述符操作

函数原型:int dup3(int oldfd ,int newfd ,int flags);

dup3和dup2类似,flags参数要么是0,要么是O_CLOEXEC

参数oldfd:被复制的文件句柄

参数newfd:复制得到的文件句柄

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值