LINUX IO 程序编程



底层IO操作函数的介绍:
       不带缓冲的IO操作又叫做底层IO操作。主要有5个函数:open()、close()、read()、write()、lseek()。这些函数 特点就是不带缓存,直接就对文件进行操作。

1.打开文件open函数
int open(const char *path, int oflags);
int open(const char *path, int oflags,mode_t mode);
– 参数path表示:路径名或者文件名,路径名为绝对路径名。
– 参数oflags表示:打开文件所采取的动作
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写
O_CREAT 不存在则创建
O_APPEND 追加
O_TRUNC 存在则清空
注意:
(1)这些标示可以用"|"运算符连接在一起使用
(2)如果使用了O_CREAT参数,需要指定创建文件的权限
@mode 用来指定文件创建时的权限 0666
注意:新建文件的实际权限 mode & ~umask
返回值:
成功返回文件描述符,失败返回-1

2.读文件
int read(int fd, void *buf, size_t count);
参数:
@fd 打开的文件
@buf 存放数据的地址
@count 期望读取字节数
返回值:
成功实际读取的字节数,失败返回-1,读到文件尾部返回0

3.写文件
int write(int fd, void *buf, size_t count);
参数:
@fd 打开的文件
@buf 存放数据的地址
@count 需要写入的字节数
返回值:
成功实际写入的字节数,失败返回-1

4.文件定位
int lseek(int fd, off_t offset, int whence);
功能:
更改内核空间打开文件的offset值
参数:
@fd 打开的文件
@offset 偏移量 大于0的数->向后偏移 小于0的数->向前偏移
@whence SEEK_SET:文件头开始 SEEK_CUR:从当前位置开始 SEEK_END:从文件尾部开始
返回值:
成功返回更新之后的offset值,失败返回-1

5.关闭文件函数
close(文件描述符);

程序示例:文件的复制
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>  //系统调用函数的头文件
int copy_file(const char *src_file,const char *dest_file)
{
	int n = 0;
	char buf[1024];
	int fd_src,fd_dest;
	fd_src = open(src_file,O_RDONLY);
	if(fd_src < 0){
		printf("Fail to open %s : %s\n",src_file,strerror(errno));
		return -1;
	}
	fd_dest = open(dest_file,O_WRONLY | O_CREAT | O_TRUNC,0666);
	if(fd_dest < 0){
		printf("Fail to open %s : %s\n",dest_file,strerror(errno));
		return -1;
	}
	while(1){
		n = read(fd_src,buf,sizeof(buf));
		if(n == 0){
			break;
		}//只需判断在源文件中读了多少数据
		if(n == -1){
			printf("Fail to read  %s : %s\n",src_file,strerror(errno));
			return -1;
		}
		n = write(fd_dest,buf,n);
		if(n == -1){
			printf("Fail to write %s : %s\n",dest_file,strerror(errno));
			return -1;
		}
	}
	close(fd_src);
	close(fd_dest);
	return 0;
}
//./a.out src_file dest_file
int main(int argc, const char *argv[])
{
	int ret;
	if(argc < 3){
		printf("Usage : %s <src file> <dest file>\n",argv[0]);
		return -1;
	}
	ret = copy_file(argv[1],argv[2]);
	if(ret < 0){
		printf("Fail to copy file : %s to %s\n",argv[1],argv[2]);
		return -1;
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值