关闭

LINUX IO 程序编程

29人阅读 评论(0) 收藏 举报
分类:


底层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;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5656次
    • 积分:556
    • 等级:
    • 排名:千里之外
    • 原创:51篇
    • 转载:1篇
    • 译文:0篇
    • 评论:4条
    最新评论