关于如何保存shell命令的返回值

HengStar 2011-01-02 09:48:21
我要写一个SMTP转发服务器,现在需要从客户端传来的邮箱域名中解析出真正的SMTP服务器地址,所以用到了nslookup命令,可以在程序里面通过system函数调用nslookup命令,查询到需要的信息,但是我不知道如何在程序中保存下这些返回的查询信息供解析,望赐教
...全文
978 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
HengStar 2011-01-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hudiao 的回复:]
linux下面还有一种简单方法就是:
system("nslookup >1.dat");
用重定位的方法,将nslookup执行的结果写到文件中,
然后从文中读取信息就可以了
[/Quote]
谢谢,我去试试先
hudiao 2011-01-02
  • 打赏
  • 举报
回复
linux下面还有一种简单方法就是:
system("nslookup >1.dat");
用重定位的方法,将nslookup执行的结果写到文件中,
然后从文中读取信息就可以了
hudiao 2011-01-02
  • 打赏
  • 举报
回复
原理是一样的
HengStar 2011-01-02
  • 打赏
  • 举报
回复
不好意思,楼上的兄弟,谢谢你的答案,不过我想要的是linux下面的^^
hudiao 2011-01-02
  • 打赏
  • 举报
回复
用system函数应该不能解决这个问题吧,我觉得要实现这种功能不应该用System函数,可以用管道来完成父子进程的通信。以前我写过一个用ipconfig命令来获取计算机硬件地址的程序,楼主看完程序就会明白该如何做了。以下是程序源代码:

//用ipconfig命令获取主机MAC地址
#include<windows.h>
#include<string>
using namespace std;
#define BUFSIZE 5120
void main()
{
//基本变量的定义
STARTUPINFO sif;
PROCESS_INFORMATION pif;
SECURITY_ATTRIBUTES sattr;
HANDLE hReadPipe,hWritePipe;
BOOL bRetCode;
//初始化sattr
sattr.nLength = sizeof(SECURITY_ATTRIBUTES);
sattr.lpSecurityDescriptor = NULL;
sattr.bInheritHandle = TRUE;
//初始化sif
memset(&sif,0,sizeof(STARTUPINFO));
sif.cb = sizeof(STARTUPINFO);
sif.dwFlags = STARTF_USESTDHANDLES;
CreatePipe(&hReadPipe,&hWritePipe,&sattr,BUFSIZE);
sif.hStdOutput = hWritePipe;
sif.hStdInput = hReadPipe;
//初始化pif
memset(&pif,0,sizeof(PROCESS_INFORMATION));
//创建ipconfig进程
bRetCode = CreateProcess(NULL,
"ipconfig /all",
NULL,
NULL,
TRUE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&sif,
&pif);
if (!bRetCode)
{
printf("%s\n","Failed to get physical address!");
return;
}
//等待子进程退出
WaitForSingleObject(pif.hProcess,INFINITE);

DWORD lenghOfRead = 0;
char temp[BUFSIZE];
string s,r;
//查找并打印MAC地址
bRetCode = ReadFile(hReadPipe,temp,BUFSIZE,&lenghOfRead,NULL);
if (lenghOfRead!=0 && bRetCode!=0)
{
temp[lenghOfRead] = '\0';
s = temp;
//printf("%s\n",temp);
char *p = "Physical Address. . . . . . . . . : ";
int len = strlen(p);
int pos = 0,count = 1;
while((pos = s.find(p,pos))!=-1)
{
pos += len;
r = s.substr(pos,17);
printf("Physical Address%d:%s\n",count++,r.c_str());
}
}
else
printf("There is no data readed!\n");
CloseHandle(pif.hProcess);
}

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧