3-4 read/write,lseek函数,cp指令的代码实现

1. write

 write(intfd, void *buf, size_t count ):

第一个参数:向哪一个文件中去写;第二个参数:向这个文件中写什么内容;第三个参数:向这个文件中写多少个。

返回值:是实际写的字节数。


2. read

read(intfd, void *buf, size_t count)

第一个参数:从哪一个文件中去读;第二个参数:读到什么地方去;第三个参数:读多少个。

返回值:是实际读的字节数


3. lseek

每个内核文件都有个文件读写位置指针,可以通过lseek函数调整这个位置。

 leek(intfd, off_t offset, int whence),该函数的头文件:sys/types.h  unistd.h;

功能:调整读写的位置指针;

第一个参数:要调整的文件的文件描述符;

第二个参数:偏移量,每一读写操作所需要移动的距离,单位是字节的数量,可正可负(向前移,向后移);

第三个参数:当前位置的基点,有三个标志,

   SEEK_SET:当前位置为文件的开头,新位置为偏移量的大小;

SEEK_CUR:当前位置为文件指针的位置,新位置为当前位置加上偏移量。

SEEK_END:当前位置为文件的结尾,新位置为文件的大小加上偏移量的大小。函

           数的

 

返回值:成功:文件当前的位置,出错:-1。


4. 示例,简单实现cp命令,拷贝文件

#include "stdio.h"
#include "unistd.h"
#include "fcntl.h"
#include "string.h"

int main(int argc,char *argv[]){
	int rd_fd,wr_fd;
	char read_buf[128] = {0};
	int rd_ret = 0;
	
	if(argc < 3){
		printf("Please input src file and dst file \n");
		return -1;
	}
	
	rd_fd = open(argv[1],O_RDONLY);
	if(rd_fd < 0){
		printf("open src file %s error\n",argv[1]);
		return -2;
	}
	printf("open src file %s success, rd_fd = %d\n",argv[1],rd_fd);
	
	wr_fd = open(argv[2],O_WRONLY);
	if(wr_fd < 0){
		printf("open dst file %s error\n",argv[2]);
		return -3;
	}
	printf("open dst file %s success, wr_fd = %d\n",argv[2],wr_fd);
	
	while(1){
		rd_ret = read(rd_fd,read_buf,128);
		if(rd_ret < 128){
			break;
		}
		write(wr_fd,read_buf,rd_ret);
		memset(read_buf,0,128);
	}
	write(wr_fd,read_buf,rd_ret);
	
	close(rd_fd);
	close(wr_fd);

	return 0;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值