执行命令并获取结果函数
2010-12-02 17:10
344 查看
Windows下:获取cmd命令返回结果
linux下:
HRESULT CMDEx(LPCTSTR pszCMD, CString &str) { if(pszCMD == NULL || pszCMD[0] == 0) { return S_FALSE; } TCHAR szCMD[1024] = {0}; STARTUPINFO si; PROCESS_INFORMATION pi; HANDLE hRead, hWrite; SECURITY_ATTRIBUTES sa = {0, NULL, TRUE}; //创建匿名管道 if(!CreatePipe(&hRead, &hWrite, &sa, 0)) { return S_FALSE; } _stprintf(szCMD, TEXT("cmd.exe /C %.1000s"), pszCMD); str.Empty(); ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; si.wShowWindow = SW_HIDE; si.hStdOutput = hWrite; si.hStdError = hWrite; si.hStdInput = hRead; //创建进程执行命令 if(CreateProcess(NULL, szCMD, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi)) { //等待命令执行完成 WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(hWrite); DWORD dwRet, dwReaded; CHAR szBuf[256] = {0}; //获取进程执行返回值 GetExitCodeProcess(pi.hProcess, &dwRet); //读取控制台终端输出 while(ReadFile(hRead, szBuf, 255, &dwReaded, NULL)) { szBuf[dwReaded] = 0; str += szBuf; } if(dwRet != 0) { str.Insert(0, TEXT("/r/n")); str.Insert(0, szCMD); } CloseHandle(hRead); return HRESULT_FROM_WIN32(dwRet); } else { CloseHandle(hWrite); CloseHandle(hRead); return(HRESULT_FROM_WIN32(GetLastError())); } }
linux下:
#include <memory.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> //执行系统命令,并获取输出 int mysystem(const char* cmdstring, char* buf, int len) { int fd[2];//文件描述符 pid_t pid;//管道 int n, count; memset(buf, 0, len); if (pipe(fd) < 0)//建立管道 return -1; if ((pid = fork()) < 0)//新建进程 return -1;//失败的话,返回-1 else if (pid > 0) /* 父进程 */ { close(fd[1]); /* 关闭写管道 */ count = 0; while ((n = read(fd[0], buf + count, len)) > 0 && count > len)//从管道中读取数据 count += n; close(fd[0]); if (waitpid(pid, NULL, 0) > 0) return -1; } else /* 子进程 */ { close(fd[0]); /* close read end */ if (fd[1] != STDOUT_FILENO) { if (dup2(fd[1], STDOUT_FILENO) != STDOUT_FILENO)//复制文件描述符 { return -1; } close(fd[1]); } if (execl("/bin/sh", "sh", "-c", cmdstring, (char*)0) == -1) { printf("%s failure/n",cmdstring); return -1; } else printf("%s success/n",cmdstring); } return 0; }
int systemex(const char* cmdstring, string &info) { if (cmdstring == NULL || cmdstring[0] == 0) return EINVAL; FILE *fd = popen(cmdstring, "r"); if (fd != NULL) { char buf[1024]; while (fgets(buf, 1024, fd)) { info += buf; } pclose(fd); } else { Log(strerror(errno), "popen"); return errno;; } return 0; }
相关文章推荐
- Perl 获取shell命令的执行结果
- popen C函数获取linux命令的执行结果
- 在.net中悄悄执行dos命令,并获取执行的结果
- Perl 获取shell命令的执行结果
- 获取python执行shell命令的结果
- 用NSTask执行外部命令并获取输出结果的方法
- 用NSTask执行外部命令并获取输出结果的方法
- 获取多台主机命令执行结果
- Java执行命令获取结果并超时退出
- 使用Java代码执行系统命令/shell命令, 并获取输出结果
- 用NSTask执行外部命令并获取输出结果的方法
- C#调用cmd执行命令获取返回结果
- 批处理技巧 批处理获取上一条命令的执行结果
- 用NSTask执行外部命令并获取输出结果的方法
- Cocoa中用NSTask执行外部命令并获取输出结果的方法
- Java执行linux命令 获取执行结果
- Qt如何执行bash命令,并获取返回结果
- 如何获取system函数执行的结果------用popen搞起(很有用)
- 用NSTask执行外部命令并获取输出结果的方法
- 批处理技巧 批处理获取上一条命令的执行结果