第二题:
int mysystem(char* buf, int len)
{
int fd[2];
pid_t pid;
int n, count;
memset(buf, 0, len);
if (pipe(fd) < 0)
return -1;
if ((pid = fork()) < 0)
return -1;
else if (pid > 0)
{
close(fd[1]);
count = 0;
while ((n =read(fd[0], buf + count, len)) > 0 && count < len)
count += n;
close(fd[0]);
printf(“%s”,buf);
if (waitpid(pid, NULL, 0) > 0)
return -1;
}
else
{
close(fd[0]);
if (fd[1] != STDOUT_FILENO)
{
if (dup2(fd[1], STDOUT_FILENO)!= STDOUT_FILENO)
{
return -1;
}
close(fd[1]);
}
if(execl("ls", "ls", (char*)0) == -1)
return -1;
}
return 0;
}
这个我还真是不知道,不过你可以询问一下相关的QQ群,也许他们的回答会对你有所启示吧,再有就是依靠网络啊,因为网络上牛人有很多啊!