最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

windows下system函数返回值

业界 admin 6浏览 0评论
在DOS下,
system()只是做一个调用其他程序的工作,只要调用成功就返回0,不成功就返回-1。
它不能得到被调用的程序的执行结果。
要得到其他程序的执行的结果,要用spawn***()这个家族的函数。
Linux和Windows中system的不同之处在于:如果子程序调用成功,但执行失败时,Linux下的system函数返回该子进程的返回值,而Windows下的system函数返回0,不是返回该子进程返回值,也无法得到该子进程返回值,所以用CreateProcess函数和GetExitCodeProcess函数代替。
改造方法如下:
1) 使用SetStdHandle函数改变STD_OUTPUT_HANDLE的值(把标准输出重定向到指定的文件)。
2) 使用GetStdHandle函数得到STD_OUTPUT_HANDLE的句柄(用来指定子进程的输出位置)。
3) 设置STARTUPINFO结构(以siStartInfo为例),siStartInfo.dwFlags|= STARTF_USESTDHANDLES,siStartInfo.hStdOutput =(上步得到的句柄)。
4) 执行CreateProcess函数,创建子进程。
5) 执行WaitForSingleObject函数,等待子进程执行结束。(注:以INFINITE为第2个参数)
6) 执行GetExitCodeProcess函数,得到子进程的退出代码。
如果你要判断system是否执行成功,下面是一种方法: 

system("commond","arg",.....) == or die ("出错信息")  在DOS下,
system()只是做一个调用其他程序的工作,只要调用成功就返回0,不成功就返回-1。
它不能得到被调用的程序的执行结果。
要得到其他程序的执行的结果,要用spawn***()这个家族的函数。
Linux和Windows中system的不同之处在于:如果子程序调用成功,但执行失败时,Linux下的system函数返回该子进程的返回值,而Windows下的system函数返回0,不是返回该子进程返回值,也无法得到该子进程返回值,所以用CreateProcess函数和GetExitCodeProcess函数代替。
改造方法如下:
1) 使用SetStdHandle函数改变STD_OUTPUT_HANDLE的值(把标准输出重定向到指定的文件)。
2) 使用GetStdHandle函数得到STD_OUTPUT_HANDLE的句柄(用来指定子进程的输出位置)。
3) 设置STARTUPINFO结构(以siStartInfo为例),siStartInfo.dwFlags|= STARTF_USESTDHANDLES,siStartInfo.hStdOutput =(上步得到的句柄)。
4) 执行CreateProcess函数,创建子进程。
5) 执行WaitForSingleObject函数,等待子进程执行结束。(注:以INFINITE为第2个参数)
6) 执行GetExitCodeProcess函数,得到子进程的退出代码。
如果你要判断system是否执行成功,下面是一种方法: 

system("commond","arg",.....) == or die ("出错信息") 
发布评论

评论列表 (0)

  1. 暂无评论