【发布时间】:2013-12-29 14:26:06
【问题描述】:
我是 C 新手。我正在通过 Stevens & Rago 的书学习 UNIX。我有一个问题。早期的数字之一在我的实现中不起作用。
#include "apue.h"
#include <sys/wait.h>
int
main(void)
{
char buf[MAXLINE];
pid_t pid;
int status;
printf("%% ");
while (fgets(buf, MAXLINE, stdin) != NULL) {
if (buf[strlen(buf) - 1] == "\n")
buf[strlen(buf) - 1] = 0;
if ((pid = fork()) < 0) {
err_sys("Fork error: %d");
}
else if ((pid == 0) && (access(buf, F_OK ) != 1)){ /* Here I have an extra check to ensure, that the binary exists. */
execlp(buf, buf, (char *)0);
err_ret("Couldn't execute: %s", buf);
exit(127);
}
if ((pid = waitpid(pid, &status, 0)) < 0)
err_sys("waitpid error");
printf("%% ");
}
exit(0);
}
当我启动程序时:
$ ./exec
% /bin/ls
Couldn't execute: /bin/ls
: No such file or directory
我有几个关于execlp(buf, buf, (char *)0);的问题:
为什么execlp 不能执行二进制文件?
int execlp(const char *file, const char *arg, ...);
为什么buf 通过了两次?如果第二个参数必须是二进制的参数。
找不到,是什么意思:(char *)0?这是什么指针?那里的零是什么?
【问题讨论】:
-
如果你不认识空指针和类型转换,那么现在还不是你搞乱流程管理和其他东西的时候。首先学习 C 的基础知识。
标签: c binary executable system-calls