linux学习之文件编程

、linux实现文件操作有两种方式

1.系统调用方法;

2.库函数实现。

下面详细介绍两种方式。

(1)系统调用

   int open(const char *pathname, int flags)

   int open(const char*pathname, int flags, mode_t mode)

   入参:pathname:路径

             flags:打开方式(O_RDONLY,O_WRONLY,O_RDWR),另外可以附加选项(O_CREAT)

  返回值:0:正确; -1:错误。

 

  off_tlseek(int fildes, off_t offset, int whence)

 入参:fildes:文件描述符;

           offset:偏移量;

           whence:设定从文件哪里开始偏移,通常可取如下(SEEK_END:文件尾, SEEK_SET:文件开头,SEEK_CUR:当前文件)

返回值:成功时返回目前读写文职,即距离文件开头多少字节。错误时返回-1.

 

   size_t read(int fd, void *buf, size_t count)

   size_t write(int fd, void *buf ,size_t count)

入参:fd:文件描述符;

          buf:存入或读取数据缓冲区;

         count:大小

返回值:读取或写数据大,错误时返回-1.

 

举例:实现文件复制功能

<pre class="objc" name="code">int main(int argc,char **argv) 
{ 
	int from_fd,to_fd;
               int ret =1;
	long file_len=0;
	char buffer[BUFFER_SIZE]; 
	char *ptr; 
	
	/*判断入参*/
	if(argc!=3) 
	{ 
		printf("Usage:%s fromfile tofile\n",argv[0]); 
		exit(1); 
	} 

/* 打开源文件 */ 
if((from_fd=fopen(argv[1],"rb"))==-1) 
{ 
	printf("Open %s Error\n",argv[1]); 
	exit(1); 
} 

/* 创建目的文件 */ 
if((to_fd=fopen(argv[2],"wb"))==-1) 
{ 
	printf("Open %s Error\n",argv[2]); 
	exit(1); 
} 

/*测得文件大小*/
file_len=lseek(from_fd,0L,SEEK_END);
fseek(from_fd,0L,SEEK_SET);
printf("from file size is=%d\n",file_len);

/*进行文件拷贝*/
while(ret) 
{ 
	ret=read(from_fd,buffer,BUFFER_SIZE);
	if(ret == -1)
	{
	        printf("read erro");
		exit(1);
 	}
	write(to_fd,buffer,ret);
	file_len-=ret;
	bzero(buffer,BUFFER_SIZE);
} 
fclose(from_fd); 
fclose(to_fd); 
exit(0); 
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值