文件IO

一、文件IO概念
Linux一个非常重要的概念,一切皆文件(everything in Linux is file)
1.文件的概念

a.文件分类 7{
- 普通文件
d 目录文件
I 符号文件 只保留所指向文件的地址而非文件本身
p 管道文件
c 字符设备 原始的I/O设备文件,每次操作仅操作1个字符(例如键盘)
b 块设备   按块I/O设备文件(例如硬盘)
s 套接字
}


b.文件描述符
{
1>文件描述符是文件IO操作的对象
2>文件描述符是一个**非负整数**,内核以此来标识一个特定已打开的文件。
3>分配原则,顺序分配,最小可用
4>一个进程启动会打开三个文件:标准输入、标准输出、标准错误输出;
	名称		文件描述符		 	宏定义
	标准输入		0			STDIN_FILENO
	标准输出		1			STDOUT_FILENO
	标准错误输出	2			STDERR_FILENO
}

二、基本文件IO函数

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

//创建文件
int creat(const char *pathname, mode_t mode);

//打开文件
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
参数1:pathname:文件的路径
   2:打开文件的方式
   3:mode: 新建文件的权限

//读写文件内容
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
ssize_t read(int fd, void *buf, size_t count);

//文件偏移量
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
参数1:文件描述符
   2:相对于基准点的偏移量,可正可负(向后移,向前移)
   3:whence:基准点
      SEEK_SET:代表文件起始位置,数字表示为0
      SEEK_CUR:代表文件当前的读写位置,数字表示为1
      SEEK_END:代表文件结束位置,数字表示为2
返回值:成功 当前文件的偏移量cfo
	   失败 -1
	   
常用方法: 
	lseek(fd, 0, SEEK_SET);   //将文件读写位置重新定位到文件开头
	ret = lseek(fd, 0, SEEK_CUR); //获取当前文件的偏移量
    lseek(fd, 0, SEEK_END); //计算文件大小	
【注】
	1>lseek()只对常规文件有效,对socket、管道、FIFO等进行lseek()操作失败。
	2>lseek()仅将当前文件的位移量记录在内核中,它并不引起任何I/O操作。
	3>文件位移量可以大于文件的当前长度,在这种情况下,对该文件的写操作会延长文件,并形成空洞。

//关闭文件
#include <unistd.h>
int close(int fd);
函数参数:fd 文件描述符
函数返回值:成功 返回0
		  失败 返回-1,并设置出错码

程序示例-获取文件大小

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>

int main(int argc,const char *argv[])
{
	if(2 > argc)
	{
		printf("arguments need equal 2");
	}

	int fd;
	long size;
	fd = open(argv[1],O_RDWR);

	size = lseek(fd,0,SEEK_END);
	printf("file size is %ld\n",size);
	close(fd);
	return 0;
}

运行结果:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值