1

如何使用 exec() 系列系统调用实现 cp 和 rm shell 命令?我搜索了很多,但没有找到任何有用的网站/链接,有人可以帮忙吗???

4

1 回答 1

3

以下是示例。

exec名称中带有的函数l将参数列表作为它们自己的参数。p后缀意味着应该使用 找到该命令,$PATH因此您只需提供命令名称即可。

execlp("cp", "cp", "sourcefile", "destfile", (char *)0);

变体采用v单个数组参数中的参数(“v”代表vector)。在这种情况下,我没有使用e后缀,所以我给出了程序的完整路径。

char *args[] = {"rm", "file1", "file2", 0);
execv("/bin/rm", args);

在这两种情况下,第一个参数也是程序的名称,因为这将成为argv[0]新进程。参数的结尾用空指针表示。您应该在使用l变体时显式提供类型转换,因为 varargs 函数不会自动将类型转换为指针。

于 2013-07-25T19:05:22.170 回答