- 论坛徽章:
- 0
|
10可用积分
服务端shell脚本为tools.sh,如下:
while true
do
# clear
echo "\n\n 系统管理工具"
echo " ┏━━━━━━━━━━━━━━━━┓"
echo " ┃ 1.__数据库管理 ┃"
echo " ┃ 2.__磁盘空间管理 ┃"
echo " ┃ 3.__系统进程管理 ┃"
echo " ┃ 4.__其他辅助管理 ┃"
echo " ┃ 0.__退出 ┃"
echo " ┗━━━━━━━━━━━━━━━━┛"
echo " 请输入选项: \c"
read xx
case $xx in
1)
database_manag.sh ;;
2)
DiskSpace_manag.sh ;;
;;
3)
sysProc_manag.sh ;;
;;
4)
orther_manag.sh ;;
;;
0)
exit
#break
;;
esac
done
不允许才用telnet或ssh方式登录主机执行该脚本,要求才用socket调用方式执行,也就是server端有一守护进程,该进程将tools.sh执行的结果输出到client端,在client端完成交互操作。
研究了半天,发现用popen函数打开tools.sh脚本后,在输出到新建的文件中能看到tools.sh的执行结果,但没有找到交互操作的办法。
试验程序如下(未完善):
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int WriteFile(const char *filename,const char *pFile,const int nLen)
{
FILE *stream=NULL;
stream=fopen(filename,"w+");
if (stream==NULL)
{
perror("Open file error");
return -1;
}
if (fwrite((void *)pFile,1,nLen,stream)!=nLen)
{
perror("Write file error");
fclose(stream);
return -1;
}
fclose(stream);
return 0;
}
int main()
{
FILE *stream;
char buf[4096];
int fd3,s_fd,n_fd;
stream=popen("tools.sh","r");
fread(buf,sizeof(char),4096,stream);
WriteFile("test.txt",buf,4096);
fd3=open("test.txt","w");
if (fd3 < 0)
{
printf("open error\n");
exit(-1);
}
/* 复制标准输出描述符 */
s_fd = dup(STDOUT_FILENO);
if (s_fd < 0)
{
printf("err in dup\n");
}
/* 重定向恢复标准输出 */
if (dup2(s_fd, n_fd) < 0)
{
printf("err in dup2\n");
}
write(STDOUT_FILENO,buf,1024);
pclose(stream);
return 0;
}
请不吝赐教,谢谢。
[ 本帖最后由 小雨飞 于 2009-3-10 17:51 编辑 ] |
|