Linux文件操作应用cp指令的实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

通过用C/C++在Linux系统下实现cp指令,来学习熟悉Linux文件编程的常用API。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Linux文件编程常用API

文件的打开与创建

//代码示例
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
    int fd;
    fd=open("./file1",O_RDWR);//第一个参数是文件名,第二个是操作权限
    if(fd==-1){//如果fd(文件描述符)为负数则文件打开失败,重新创建一个
      fd=open("./file1",O_RDWR|O_CREAT,0600);/*第二个参数多加了O_CREAT是
      创建文件的意思,(0600)表示用户对此文件的(可读可写)操作权限*/
      printf("creat file1 success!\n");
      }
}

文件的写入

//代码示例
#include <unistd.h>
int main()
{
   char *buf="hello world!";
   int fd=open("./file1",O_RDWR);
   int n_write=write(fd,buf,strlen(buf));/*第一个参数是fd(文件描述符),
   第二个是写入的字符串,第三个参数字符串的长度*/
   close(fd);//关闭文件
}

文件内容的读取

#include <unistd.h>
int main()
{
    char *buf="hello world!";
    int fd=open("./file1",O_RDWR);
	int n_write=write(fd,buf,strlen(buf));//n_write为写入文件的字符个数
    char *readbuf=(char*)malloc(sizeof(char)*n_write+1);/*定义一个指针,
    并为其开辟n_write+1个空间*/
    int n_read=read(fd,readbuf,n_write);//将文件里的内容读取到readbuf中
    close(fd);
}

文件光标的移动

#include <sys/types.h>
#include <unistd.h>
 off_t lseek(int fd, off_t offset, int whence);/*第一个参数fd(文件描述符)
 ,第二个光标在字符串中的位移量,正数向左负数向右*/
 /*
        注:
       whence(当前位置,第三个参数):
       SEEK_SET  文件头
       SEEK_CUR  当前位置
       SEEK_END  文件尾
 */

二、编程思路及代码示例

1.编程思路

1、打开src.c(源文件)
2、读取源文件中的信息到buf(存放内容的地址)
3、打开或创建des.c(目标文件)
4、将buf写入到des.c中
5、close两个文件

2.代码示例

代码如下:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main(int argc , char **argv)
{
        int fdSrc;
        int fdDes;
        char *readBuf = NULL;
        if(argc != 3){						
                printf("param error!\n");
                exit(-1);
        }
        fdSrc = open(argv[1],O_RDWR);		
        int size = lseek(fdSrc,0,SEEK_END);	
		lseek(fdSrc,0,SEEK_SET);					
        readBuf = (char *)malloc(sizeof(char)*size + 8);	
        int n_read = read(fdSrc,readBuf,1024);				
        fdDes = open(argv[2],O_RDWR|O_CREAT,0600);			
        int n_write = write(fdDes,readBuf,strlen(readBuf));
        close(fdSrc);	
        close(fdDes);
        return 0;
}
 

总结

通过实现简单的CP指令从而熟悉Linux文件编程常用的API

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值