Linux之 IO编程三

Linux 同时被 2 个专栏收录
10 篇文章 0 订阅
4 篇文章 0 订阅

一.文件 IO 介绍

  1. 不带缓冲区

  2. 直接调用内核(linux)提供的函数接口

  3. 通过文件描述符来访问文件

  4. 文件IO常见的函数
    open / close
    read / write
    lseek
    注:这些函数都是由 linux内核提供的
    都在 man手册的卷2中

    常见函数:

open
		$ man 2 open 
		#include <sys/types.h>
		#include <sys/stat.h>
		#include <fcntl.h>
		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_APPEND	如果文件存在,则以追加方式打开
		*		O_CREAT		如果文件不存在,则创建
		*		O_TRUNC		如果文件存在,则清空   ( 主要讲解 或 运算 )
		*      @mode	当指定O_CREAT,则表示创建文件的文件权限(user group other)
		*				如果未指定O_CREAT,则被忽略
		*
		*返回值:  成功  返回文件描述符
		*		  失败  返回 -1   更新 errno
		******************************************/

close
		#include <unistd.h>
		int close(int fd);
		/*****************************************
		*功能: 关闭文件
		*参数: @fd   	文件描述符   
		*
		*返回值:  成功  返回 0
		*		  失败  返回 -1   更新 errno
		******************************************/
fread
		#include <stdio.h>
		size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
		/*********************************************
		*功能: 从指定的文件中读数据,读到内存中
		*参数:  @ptr    读的数据保存在内存的那个地址中
		*		@size	数据元素的大小
		*		@nmemb  数据元素的个数
		*		@stream 文件流
		*返回值: 
		* 		成功:  返回读入文件中元素的个数 (nmemb)
		*		失败:  返回值小于nmemb或者等于0
		**********************************************/
fwrite
		#include <stdio.h>
		size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
		/*********************************************
		*功能: 写数据到指定的文件中
		*参数:  @ptr    要写的数据保存在内存的那个地址中
		*		@size	数据元素的大小
		*		@nmemb  数据元素的个数
		*		@stream 文件流
		*返回值: 
		* 		成功:  返回写出文件中元素的个数 (nmemb)
		*		失败:  返回值小于nmemb或者等于0
		**********************************************/
write
		#include <unistd.h>
		ssize_t write(int fd, const void *buf, size_t count);
		/*****************************************
		*功能: 写文件
		*参数: @fd   	文件描述符
		*	   @buf		要把内存中那些内容写到文件中
		*	   @count	要写入多少字节
		*
		*返回值:  成功  返回 写入的字节个数
		*		  失败  返回 -1   更新 errno
		******************************************/
read
		#include <unistd.h>
		ssize_t read(int fd, void *buf, size_t count);
		/*****************************************
		*功能: 读文件
		*参数: @fd   	文件描述符   
		*	   @buf		从文件中读取的内容放到内存的那个位置
		*	   @count	要读取多少字节
		*
		*返回值:  成功  返回 读取的字节个数  
		*				返回值为 0 表示读到文件结尾
		*		  失败  返回 -1   更新 errno
		******************************************/
lseek
		#include <sys/types.h>
		#include <unistd.h>
		off_t lseek(int fd, off_t offset, int whence);
		/*****************************************
		*功能: 移动文件指针
		*参数: @fd   	文件描述符
		*	   @offset	偏移值
		*	   @whence	
		*		 SEEK_SET:	文件开头位置
		*		 SEEK_CUR:	当前文件指针位置
		*		 SEEK_END:	文件结尾位置
		*
		*返回值:  成功  返回 设置后的文件指针相对于文件开始的偏移值
		*		  失败  返回 -1   更新 errno
		******************************************/

二.什么是文件描述符 (FILE DESCRIPTION)

1. 在尝试使用open函数打开一个文件时,成功就会返回文件描述符。
2. 它是一个 int 类型的整数  取值范围是 (0-1023)
3. 标准输入,标准输出,标准错误输出 
	0			1			2
	
4. open函数执行成功的返回值就是文件描述符
5. 读写文件,都是通过文件描述符进行的。 

标准IO中 r r+ w w+ a a+ 分别对应那些 O_XXX 的组合

标准IO 		文件IO
r			O_RDONLY
r+			O_RDWR
w			O_WRONLY | O_CREAT | O_TRUNC
w+			O_RDWR   | O_CREAT | O_TRUNC
a			O_WRONLY | O_CREAT | O_APPEND
a+			O_RDWR   | O_CREAT | O_APPEND
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

Jade Bodhi

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值