通过文件IO重写cp复制命令
先有一个文件a.txt
命令行执行
gcc io.c -o io
./io a.txt b.txt
则能将a.txt的内容复制到b.txt中
.
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int fd,fd2;
int retval;
char string[512];
char buffer[512];
ssize_t wr_ret, rd_ret;
off_t offset;
fd = open( argv[1], O_RDWR|O_CREAT,00777);
fd2= open( argv[2], O_RDWR|O_CREAT,00777);
if(fd == -1)
{
perror("open a.txt error");
return -1;
}
if(fd2 == -1)
{
perror("open a.txt error");
return -1;
}
bzero(buffer, sizeof(buffer));
//给指定的内存全部设置为0
rd_ret = read(fd, buffer, sizeof(buffer));
if(rd_ret == -1)
{
perror("read file error");
goto opt_file_err;
}
//printf("readsize=%ld, read=%s\n", rd_ret, buffer);
offset = lseek(fd, -rd_ret, SEEK_CUR);
if(offset == -1)
{
perror("offset file error");
goto opt_file_err;
}
wr_ret = write( fd2, buffer, strlen(buffer));
if(wr_ret == -1)
{
perror("write data to file error");
goto opt_file_err;
}
retval = close(fd);
if(retval == -1)
{
perror("close a.txt error");
return -1;
}
return 0;
/*退出main函数,调用底层的linux标准退出手续(执行退出处理函数,
清除(更新)文件缓冲),然后在调用系统内部的进程退出,退出整个程序*/
opt_file_err:
close(fd);
return -1;
}