Linux编程-文件操作

提示:学完本章内容后,你将掌握文件操作的基本知识


前言

提示:linux系统通过了许多内核功能的API,程序设计者可以通过调用这些API实现系统的某些功能:

例如:支持对文件完整操作的open、read、write和close函数,以及支持网络服务功能的socket等。


提示:以下是本篇文章所需的API,下面案例可供参考

一、支持文件操作API汇总

  • int creat(const char *pathname, mode_t mode);
  • int open(const char *pathname, int flags, mode_t mode);
  • ssize_t read(int fd, void *buf, size_t count);
  • ssize_t write(int fd, const void *buf, size_t count);
  • off_t lseek(int fd, off_t offset, int whence);
  • int close(int fd);

二、文件使用步骤

1.creat()

以mode权限创建pathname文件,与open区别在于创建后并不打开文件,使用不需要close文件。
代码如下(示例):

#include <unistd.h>
//int creat(const char *pathname, mode_t mode);
char *pathname = "./a.txt"						//文件路径可以是相对路径或绝对路径
int status = creat(pathname,0600);				//以可读可写权限创建a.txt文件并返回创建状态

2.open()

以flages参数指定的权限打开pathname指向的文件,并返回int型文件描述符值。参数mode只有创建文件时使用,为文件赋予权限属性。

代码如下(示例):

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
//int open(const char *pathname, int flags, mode_t mode)
char *pathname = "./a.txt"						//可以相对路径或绝对路径
int fd = open(pathname,O_CREAT|O_RDWR,0600);	//以可读可写权限打开a.txt后返回文件描述符,若不存在,以0600权限创建a.txt
/*参数flags是打开文件的方式:
	1.O_RDONLY:以只读权限打开文件
	2.O_WRONLY:以只写权限打开文件
	3.O_RDWR:以读写权限打开文件
	4.O_APPEND:以追加方式打开权限,向文件写入时不会覆盖原内容
	5.O_CREAT:若文件不存在则创建文件并打开,使用该权限必须提供mode值
	6.O_EXCL:打开已经存在的文件返回-1并退出
	7.O_TRUNC:打开的文件已经存在,以只读或只写方式开文件会删除所有内容
*/
/*参数mode用于给将被创建的pathname赋予权限,当使用O_CREAT时该参数不可省略,以0600值为例:
	1.0表示后面的600为八进制值
	2.6表示图第1位列的4和2的权限总和   故:所有拥有者有读、写权限
	3.0表示图第2位列,既不是4,也不是2或1的权限,表示不指定当前用户所在群组对文件的使用权限
	4.0表示图第3位列,既不是4,也不是2或1的权限,表示不指定其它用户对文件的使用权限
*/

在这里插入图片描述

3.read()

从fd指向的文件中读取count个的字节存储到buf缓冲区后返回实际读取的字节总数,光标位置会对应的向右偏移count个字节。
代码如下(示例):

#include <unistd.h>
//ssize_t read(int fd, void *buf, size_t count)
char *buf = (char*)malloc(count);			//在内存堆栈区中申请count个字节存储单元并将其单元的首地址存储在buf指针中
int realcount = read(fd,buf,strlen(buf));	//将文件描述符fd指向的文件中读取buf个长度的字节并存储到buf指向的单元空间后realcount接收实际读取的字节总数

4.write()

将buf指向单元的count个字节向fd指向的文件中写入,注意文件被写入时光标位置要设置在内容的尾部,否则光标所处的内容将被buf内容覆盖count个字节。
代码如下(示例):

#include <unistd.h>
//ssize_t write(int fd, const void *buf, size_t count);
char *buf = "Hello World!";						//定义一个指向常量区字符串单元首地址
int realcount = write(fd,buf,strlen(buf));		//将这个字符串写入fd指向的文件中,realcount接受实际写入的字节总数

5.lseek()

将fd指向的文件当前光标位置设置在whence位置,再向左或右偏移offset个字节,并返回实际光标偏移总量,可以用偏移量计算出文件大小。
代码如下(示例):

#include <sys/types.h>
#include <unistd.h>
//off_t lseek(int fd, off_t offset, int whence);
int realcount = lseek(fd,0,SEEK_SET);			//将文件光标指向开头并返回总偏移字节数

6.close()

关闭fd指向的文件。
代码如下(示例):

#include <unistd.h>
//int close(int fd);
close(fd);

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本章主要讲解文件类的API使用方法,在Linux中,文件被打开后是以文件描述符的方式来表示文件的,所以除了打开或创建文件外,其余操作都是通过文件描述符方式操作文件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值