Linux文件IO操作之IO编程(一)

1.文件操作(系统I/O)

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
mode:这个参数,只有在文件不存在时有效,指新建文件时指定文件的权限

返回值:

成功:成功返回打开的文件描述符
失败:-1
flags详细说明

必选项:

取值含义
O_RDONLY以只读的方式打开
O_WRONLY以只写的方式打开
O_RDWR以可读、可写的方式打开

可选项,和必选项按位或起来

取值含义
O_CREAT文件不存在则创建文件,使用此选项时需使用mode说明文件的权限
O_EXCL如果同时指定了O_CREAT,且文件已经存在,则出错
O_TRUNC如果文件存在,则清空文件内容
O_APPEND写文件时,数据添加到文件末尾
O_NONBLOCK对于设备文件, 以O_NONBLOCK方式打开可以做非阻塞I/O

1.2.关闭文件close

int close(int fd);

功能:
关闭已打开的文件

参数:
fd : 文件描述符,open()的返回值

返回值:
成功:0
失败: -1, 并设置errno

1.3.从文件读数据read

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

功能:
把指定数目的数据读到内存(缓冲区)

参数:
fd : 文件描述符
buf : 内存首地址
count : 读取的字节个数

返回值:
成功:实际读取到的字节个数
失败: - 1

1.4.向文件写数据write

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

功能:
把指定数目的数据写到文件(fd)

参数:
fd : 文件描述符
buf : 数据首地址
count : 写入数据的长度(字节)

返回值:
成功:实际写入数据的字节个数
失败: - 1

1.5.调整文件位置lseek

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

功能:
调整文件位置偏移量

参数:
fd : 文件描述符
offset:相对基准点的偏移大小
whence : 基准点

返回值:
成功:新文件位置偏移量(相对于文件开头的偏移)
失败: - 1

whence 详细说明

取值含义
SEEK_SET文件开头处
SEEK_CUR当前位置
SEEK_END文件末尾处

1.6.参考代码

//=============================================================================
// File Name    : IO_programme_1.c
// Author       : FengQQ
//
// Description  : 非缓冲文件系统IO操作
// Annotation   : 
//
// Created by FengQQ. 2020-9-24
//=============================================================================
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc,char* argv[])
{
	int ret;
	int fd;
	unsigned long file_size;
	char wr_buf[100] = "hello world,my name is caiji";
	char rd_buf[100];
	
	fd = open("test1.txt",O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IROTH);//打开文件
	if(fd < 0)
	{
		printf("open file error...\r\n");		
		return -1;
	}
	
	ret = write(fd,wr_buf,sizeof(wr_buf));	//写入数据
	if(ret < 0)
	{
		printf("write file error...\r\n");		
		return -1;
	}

	lseek(fd,0,SEEK_SET);
	
	ret = read(fd,rd_buf,sizeof(rd_buf));	//读取数据
	if(ret < 0)
	{
		printf("read file error...\r\n");		
		return -1;
	}
	
	printf("rd_buf = %s\r\n", rd_buf);		//打印数据 
	
	file_size = lseek(fd,0,SEEK_END);		//获取指定文件的当前位置偏移量
	if(file_size < 0)
	{
		printf("file_size error...\r\n");
	}
	
	printf("file_size = %lu\n", file_size);	//打印当前文件大小
 
	close(fd);								//关闭文件
	
	return 0;
}


2.文件操作(标准I/O)

2.1.打开文件fopen()

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

功能:

获取指定文件的文件指针。

参数:

path:要打开的文件的路径名称
mode:打开文件的行为标志

返回值:

成功:文件指针
失败:NULL

mode详细说明

必选项:

取值含义
“r”以只读方式打开文件,要求文件必须存在。
“r+”以读写方式打开文件,要求文件必须存在。
“w”以只写方式打开文件,文件如果不存在将会创建新文件,如果存在将会将其内容清空。
“w+”以读写方式打开文件,文件如果不存在将会创建新文件,如果存在将会将其内容清空。
“a”以只写方式打开文件,文件如果不存在将会创建新文件,且文件位置偏移量被自动定位到文件末尾(即以追加方式写数据)。
“a+”以读写方式打开文件,文件如果不存在将会创建新文件,第一次用于写数据则文件位置偏移量被自动定位到文件末尾(即以追加方式写数据),如果第一次用于读数据,文件位置偏移位置会定位到文件开始。

2.2.关闭文件fclose

	int fclose(FILE *fp);

功能:
闭指定的文件并释放其资源

参数:
fp : 即将要关闭的文件

返回值:
成功:0
失败: EOF

2.3.从文件读数据fread

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

功能:
从指定文件读取若干个数据块

参数:
ptr : 自定义缓冲区指针。
size : 数据块大小
nmemb : 数据块个数
stream : 即将被读取数据的文件指针

返回值:
成功:读取的数据块个数,等于 nmemb
失败: 读取的数据块个数,小于 nmemb 或等于 0

2.4.向文件写数据fwrite

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

功能:
将若干块数据写入指定的文件

参数:
ptr : 自定义缓冲区指针。
size : 数据块大小
nmemb : 数据块个数
stream : 即将被写入数据的文件指针

返回值:
成功:写入的数据块个数,等于 sinmembze
失败: 写入的数据块个数,小于 nmemb 或等于 0

2.5.调整文件位置fseek

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

功能:
设置指定文件的当前位置偏移量

参数:
stream: 需要设置位置偏移量的文件指针
offset:新位置偏移量相对基准点的偏移
whence : 基准点

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

whence 详细说明

取值含义
SEEK_SET文件开头处
SEEK_CUR当前位置
SEEK_END文件末尾处

2.6.获取指定文件的当前位置ftell

	long ftell(FILE *stream);

功能:
获取指定文件的当前位置偏移量

参数:
stream : 需要返回当前文件位置偏移量的文件指针

返回值:
成功:当前文件位置偏移量
失败:-1

2.7.将指定文件的当前位置偏移量设置到文件开头处rewind

	void rewind(FILE *stream);

功能:
将指定文件的当前位置偏移量设置到文件开头处

参数:
stream : 需要设置位置偏移量的文件指针

返回值:

2.8.参考代码

//=============================================================================
// File Name    : IO_programme_2.c
// Author       : FengQQ
//
// Description  : 缓冲文件系统IO操作
// Annotation   : 
//
// Created by FengQQ. 2020-9-24
//=============================================================================
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc,char* argv[])
{
	int ret;
	FILE *fp;
	unsigned long file_size;
	char wr_buf[100] = "hello world,my name is caiji";
	char rd_buf[100];
	
	fp = fopen("test2.txt","a+");				//打开文件:文件追加,可读可写,文件不存在则创建
	if(fp == NULL)
	{
		printf("fopen file error...\r\n");		
		return -1;
	}
	
	ret = fwrite(wr_buf,sizeof(wr_buf),1,fp);	//写入数据
	if(ret < 0)
	{
		printf("fwrite file error...\r\n");		
		return -1;
	}
	
	rewind(fp);									//将文件的当前位置偏移量设置到文件开头处							
	
	ret = fread(rd_buf,sizeof(rd_buf),1,fp);	//读取数据
	if(ret < 0)
	{
		printf("fread file error...\r\n");		
		return -1;
	}
	
	printf("rd_buf = %s\r\n", rd_buf);			//打印数据 
	
	ret = fseek(fp, 0, SEEK_END);				//设置指定文件的当前位置偏移量:SEEK_CUR:当前位置 ; SEEK_END:文件末尾处
	if(ret < 0)
	{
		printf("fseek file error...\r\n");	
	}
		
	
	file_size = ftell(fp);						//获取指定文件的当前位置偏移量
	if(file_size < 0)
	{
		printf("file_size error...\r\n");
	}
	
	printf("file_size = %lu\n", file_size);		//打印当前文件大小
 
	fclose(fp);									//关闭文件
	
	return 0;
}


Linux多任务编程之进程(二)
链接: link.(https://blog.csdn.net/qq_39721016/article/details/119204626?spm=1001.2014.3001.5501)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值