原来也是,
曾经那是自己还 比较年轻,什么也不懂,
哈哈哈,
想用命令行的时候就使用_tsystem()这个函数,觉得挺简单,挺爽的。
可是越来越觉得有问题,
问题一:这个函数执行的命令行是否执行。
问题二:是否执行成功。
问题三:是否执行完成后正常退出。
但是问题总会解决,今天就是我和_tsystem()函数摊牌的时候了。虽然解决的问题只是一小部分,但是目前还可以解决燃眉之急。
深入讨论_tsystem()函数:
执行命令行md测试,执行成功,返回值为0.
执行命令行md测试,如果创建的文件夹已经存在,返回值为1
msdn里面是这么说返回值的:
如果命令是NULL的命令解释器,返回一个非零值。如果命令解释器没有找到,返回0,并设置errno为ENOENT。如果不为NULL命令,系统将返回值,则返回的命令解释器。它返回的值为0,只有当命令解释器返回的值为0。返回值 - 1表示一个错误,并把errno设置为下列值之一:
E2BIG
参数列表(这是依赖于系统)是太大了。
ENOENT
命令解释器,可以不被发现。
ENOEXEC
命令解释器的文件格式无效,无法执行。
ENOMEM
没有足够的内存可用于执行命令;或可用内存已损坏或无效块存在,这表明进程调用不正确分配。
后续整理。今天没时间了。
--------------------------------------------------------------------------------------------------------------------------------------------
今天接着测试System()这个函数。
想说说文自己的想法:
这里单单在主线程中,调用System()函数作为测试。
第一:也就是说在主线程中,通过System函数创建一个新的进程,然后去得到这个进程的句柄来控制,但是,这样直接是没办法得到新创建的进程的句柄信息。
第二:就是,把这个System函数创建的进程放进一个内核对象或者作业里面,通过作业或者内核对象来控制自己新启动的进程。
第三:考虑到system这个函数是阻塞的,也就是它会等着它启动的进程执行完成后,才有返回值,这样就可以每次都判断它的返回值,来判断是否执行成功。再加上try 块来 捕 获异常。
第四:要么就通过定义宏,来用其他的函数来替换System函数。