使用Linux系统调用编写一个完成文件拷贝的C程序。
时间: 2024-10-23 11:06:21 浏览: 16
在Linux系统中,我们可以使用系统调用来实现文件拷贝功能,通常会利用`read()`、`write()`或者更高级的`copyfile()`等函数。下面是一个简单的C程序示例,它通过`fork()`和`execve()`系统调用来创建一个子进程并运行`cp`命令,实现文件拷贝:
```c
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#define SRC_FILE "source.txt"
#define DST_FILE "destination.txt"
int main(int argc, char *argv[]) {
int pid;
char cmd[] = "cp "SRC_FILE" "DST_FILE;
// 创建子进程
if ((pid = fork()) == 0) { // 子进程
// 将命令替换当前工作目录
chdir("/");
// 执行命令
execlp("sh", "sh", "-c", cmd, NULL);
perror("execlp");
exit(EXIT_FAILURE);
} else { // 父进程
wait(NULL); // 等待子进程结束
printf("File copied successfully.\n");
}
return 0;
}
```
在这个程序中,我们首先通过`fork()`创建一个子进程,然后在子进程中使用`execlp()`执行shell命令`cp`,将源文件复制到目标文件。注意这里需要先切换到根目录(`/`),因为`execlp`会在原工作目录下查找命令。
阅读全文