怎样在一个程序执行期间运行另一个程序?
正如你在20.10的例子中看到的那样,spawn()函数族允许在一个程序中启动另一个程序,并在后者结束后返回到前者之中。有关spawn()函数的背景知识和例子(你只需把其中的_P_OVERLAY改为_P_WAIT) 请参见20.10。
然而,还有另外一种方法可以完成这项工作,即使用system()函数。system()函数与exec()或spawn()函数相似,但也不有同之处。除了挂起(而不是结束)当前程序去执行新程序外,system()还要启动COMMAND.COM命令翻译程序(或者其它任何运行在你的计算机上的命令翻译程序)。如果它找不到COMMAND.COM或类似的程序,那么它就不会去执行所要求的程序(这一点与exec()或spawn()函数不同)。下例是调用EDIT.COM打开一个文件的另一个程序版本,其中的文件名也来自该例的命令行:
# include <stdio. h>
# include <process. h>
# inclued <stdlib. h>
char argStr[255] ;
void
main(int argc, char **argv)
int ret ;
/ * Have EDIT open a file called HELLO if no arg given * /
sprintf (argStr ,"EDIT %s", (argv[1] == NULL?"HELLO" :argyll3) ) ;
/ * Call the one with variable arguments and an environment * /
ret = sytem (argStr) ;
printf("system() returned %d\n" ,ret) ;
}
与20.10中的例子一样(使用_P_WAIT),在system()调用后面的print{()语句会被执行,因为原来的程序只是被挂起而不是被终止。在每一种情况下,system()都会返回一个表示是否成功地运行了所指定的程序的值,而不会返回所指定的程序的返回值。
然而,还有另外一种方法可以完成这项工作,即使用system()函数。system()函数与exec()或spawn()函数相似,但也不有同之处。除了挂起(而不是结束)当前程序去执行新程序外,system()还要启动COMMAND.COM命令翻译程序(或者其它任何运行在你的计算机上的命令翻译程序)。如果它找不到COMMAND.COM或类似的程序,那么它就不会去执行所要求的程序(这一点与exec()或spawn()函数不同)。下例是调用EDIT.COM打开一个文件的另一个程序版本,其中的文件名也来自该例的命令行:
# include <stdio. h>
# include <process. h>
# inclued <stdlib. h>
char argStr[255] ;
void
main(int argc, char **argv)
int ret ;
/ * Have EDIT open a file called HELLO if no arg given * /
sprintf (argStr ,"EDIT %s", (argv[1] == NULL?"HELLO" :argyll3) ) ;
/ * Call the one with variable arguments and an environment * /
ret = sytem (argStr) ;
printf("system() returned %d\n" ,ret) ;
}
与20.10中的例子一样(使用_P_WAIT),在system()调用后面的print{()语句会被执行,因为原来的程序只是被挂起而不是被终止。在每一种情况下,system()都会返回一个表示是否成功地运行了所指定的程序的值,而不会返回所指定的程序的返回值。