仿写linux cp命令 基于posix api
时间: 2023-09-13 18:07:55 浏览: 129
在 POSIX API 中,可以使用 open、read、write 和 close 等函数来实现文件拷贝操作。下面是一个基于 POSIX API 的文件拷贝程序,实现了类似于 Linux 中的 cp 命令的功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#define BUFFER_SIZE 4096
int main(int argc, char *argv[]) {
int input_fd, output_fd;
ssize_t ret_in, ret_out;
char buffer[BUFFER_SIZE];
if (argc != 3) {
fprintf(stderr, "Usage: %s file1 file2\n", argv[0]);
return EXIT_FAILURE;
}
input_fd = open(argv[1], O_RDONLY);
if (input_fd == -1) {
fprintf(stderr, "Error opening file %s\n", argv[1]);
return EXIT_FAILURE;
}
output_fd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (output_fd == -1) {
fprintf(stderr, "Error opening file %s\n", argv[2]);
return EXIT_FAILURE;
}
while ((ret_in = read(input_fd, &buffer, BUFFER_SIZE)) > 0) {
ret_out = write(output_fd, &buffer, (ssize_t) ret_in);
if (ret_out != ret_in) {
fprintf(stderr, "Error writing file %s\n", argv[2]);
return EXIT_FAILURE;
}
}
close(input_fd);
close(output_fd);
return EXIT_SUCCESS;
}
```
该程序接受两个参数,分别是源文件和目标文件的路径。它先用 open 函数打开源文件和目标文件,然后使用 read 和 write 函数循环读取和写入数据,直到源文件被完全读取。最后,关闭文件描述符并返回程序状态。
阅读全文