1.实现cp功能
1.打开src.c
2.读取src.c到buf
3.打开srs.c
4.将buf写入des.c
5.关闭两个文件
argv[0] argv[1] argv[2]
cp指令 src.c des.c
首先先了解 argv argc 直接代码理解
#include <stdio.h>
int main(int argc,char **argv)
{
printf("total is %d\n",argc);
printf("NO.1 is %s\n",argv[0]);
printf("NO.2 is %s\n",argv[1]);
printf("NO.3 is %s\n",argv[2]);
return 0;
}
当然不止3个值 可以有更多
了解这个后可以用argv操作多项的指令了
下面开始cp指令的实现
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
int fdsrc;
int fdes;
char *readbuf = NULL;
if(argc !=3) //参数不等于3 就退出程序 ./a.out xxx xx 复制文件
{
printf("pararm error");
exit(0);
}
fdsrc = open(argv[1],O_RDWR); //打开文件 xxx
int size= lseek(fdsrc,0,SEEK_END); //读取到光标尾判断文件fdsrc大小
lseek(fdsrc,0,SEEK_SET); //光标再移动到首
readbuf =(char *)malloc(sizeof(char)*size + 8); //开辟空间
int n_read = read(fdsrc,readbuf,size); //读取文件fdsrc到readbuf里面 读取的大小为size
fdes = open(argv[2],O_RDWR|O_CREAT|O_TRUNC,0600); //打开文件xx 若文件不存在则创建文件 若文件存在则清空文件
int n_write =write(fdes,readbuf,strlen(readbuf)); //将readbuf写入fdes里面
close(fdsrc);
close(fdes);
return 0;
}
成功将1.c复制一个2.c
2.写结构体到文件
#include<sys/types.h>
#include<sys/stat.h>
#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
//往文件里面写结构体 open跟write read
struct as
{
int a;
char c;
};
int main()
{
int fd;
struct as data[2] ={{100,'a'},{101,'b'}};
struct as data2[2];
fd=open("./file3",O_RDWR|O_CREAT); //打开文件 没有就创建
int n_write= write(fd,&data,sizeof(struct as)*2); //地址就是指针
lseek(fd,0,SEEK_SET);
int n_read=read(fd,&data2,sizeof(struct as)*2); //返回值 大于0是成功 ,等于-1则失败
//将data里面的数据 写入data2里面
printf("%d\n",fd);
printf("read=%d,%c\n",data[0].a,data[0].c);
printf("read=%d,%c\n",data[1].a,data[1].c);
close(fd);
return 0;
}