C下执行命令行的方法.docx
文本预览下载声明
一、system()--执行shell命令
1、包含头文件:
#include stdlib.h
2、定义
int system(const char * string);
3、参数
String:合法的可执行DOS(SHELL)命令
4、返回值
1)如果 system()在调用/bin/sh 时失败则返回127, 其他失败原因返回-1。
2)若参数string 为空指针(NULL), 则返回非零值。
3)如果system()调用成功则最后会返回执行shell 命令后的返回值, 但是此返回值也有可能为system()调用/bin/sh 失败所返回的127, 因此最好能再检查errno 来确认执行成功。
5、说明
system()会调用fork()产生子进程, 由子进程来调用/bin/sh-c string 来执行参数string 字符串所代表的命令, 此命令执行完后随即返回原调用的进程. 在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT 和SIGQUIT 信号则会被忽略。
6、用例
system(“ipconfig/all”);
7、重定向标准输出流
FILE *stream;
stream = freopen(“data.txt”,”wb”,stdout);
运行结果可以重定向到data.txt
8、隐藏控制台窗口
#pragma comment( linker, “/subsystem:\”windows\” /entry:\”mainCRTStartup\”” )
仍有调用的DOS窗口一闪,且重定向失效。
二、WinExec()—运行可执行程序
1、包含头文件
#includewindows.h
2、定义
UINT Win Exec(LPCSTR lpCmdLine, UINT uCmdShow);
3、参数
lpCmdLine:指向一个空结束的字符串,串中包含将要执行的应用程序的命令行(文件名加上可选参数)。
uCmdShow:定义Windows应用程序的窗口如何显示,并为CreateProcess函数提供STARTUPINFO参数的wShowWindow成员的值。
//uCmdShow 参数可选值:
SW_HIDE = 0; {隐藏, 并且任务栏也没有最小化图标}
SW_SHOWNORMAL = 1; {用最近的大小和位置显示, 激活}
SW_NORMAL = 1; {同 SW_SHOWNORMAL}
SW_SHOWMINIMIZED = 2; {最小化, 激活}
SW_SHOWMAXIMIZED = 3; {最大化, 激活}
SW_MAXIMIZE = 3; {同 SW_SHOWMAXIMIZED}
SW_SHOWNOACTIVATE = 4; {用最近的大小和位置显示, 不激活}
SW_SHOW = 5; {同 SW_SHOWNORMAL}
SW_MINIMIZE = 6; {最小化, 不激活}
SW_SHOWMINNOACTIVE = 7; {同 SW_MINIMIZE}
SW_SHOWNA = 8; {同 SW_SHOWNOACTIVATE}
SW_RESTORE = 9; {同 SW_SHOWNORMAL}
SW_SHOWDEFAULT = 10; {同 SW_SHOWNORMAL}
SW_MAX = 10; {同 SW_SHOWNORMAL}
4、返回值
若函数调用成功,则返回值大于31。若函数调用失败,则返回值为下列之一:
1)0:系统内存或资源已耗尽。
2)ERROR_BAD_FORMAT:EXE文件无效(非Win32.EXE或.EXE影像错误)。
3)ERROR_FILE_NOT_FOUND:指定的文件未找到。
4)ERROR_PATH_NOT_FOUND:指定的路径未找到。
5)大于 31 {调用成功}
6)等于 0 {内存不足}
7)ERROR_FILE_NOT_FOUND = 2; {文件名错误}
8)ERROR_PATH_NOT_FOUND = 3; {路径名错误}
9)ERROR_BAD_FORMAT = 11; {EXE 文件无效}
5、用例
WinExec(notepad.exe,SW_SHOW);//运行计事本
WinExec(“cmd /c ipconfig”,SW_SHOW); //运行命令行
6、重定向标准输出流
不同窗口,无法重定向
7、隐藏控制台窗口
#pragma
SW_HIDE
窗口都隐藏。
三、ShellExecute()—运行文件
1、包含头文件
#include shellapi.h
2、定义
ShellExecute(
hWnd: HWND; {指定父窗口句柄}
Operation: PChar; {指定动作, 譬如: open、runa
显示全部