LINUX IO 程序编程

原创 2016年08月30日 19:45:53


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


版权声明:本文为博主原创文章,大家一起交流,共同进步。

相关文章推荐

Linux下C编程-----IO/文件操作 模拟linux ls程序显示文件系统树形结构(2)

Linux下的IO/文件操作练习,知识虽然简单 但是往往基础容易被忽略,偶尔的练习是有必要的。        练习printf /***********************************...

linux 的io编程文档

  • 2012-07-24 20:24
  • 746KB
  • 下载

Linux驱动程序开发008 - 设备IO

序言: 前面我们提到,设备驱动程序的主要功能操作设备,更准确的说就是如何操作设备寄存器或设备内存。不同的计算机体系结构提供了不同的设备操作接口,主要就是IO端口映射(Ports)或IO内存映射(Me...

Linux驱动程序之阻塞和非阻塞IO

所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回。也就是说在执行设备操作时,若不能获得资源,则挂起进程直...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)