gpt4 book ai didi

c - 从 C 代码生成程序的多个副本并将输出重定向到文件

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:46 24 4
gpt4 key购买 nike

我正在修改用 MSDN C 和 Pro*C(用于编写内联 SQL 和 PL/SQL 语句的 Oracle 预编译器)编写的命令行程序,以便生成多个副本并同时处理.这是一个数据库密集型程序,并发问题主要在数据库端处理,因此我们认为只运行多个副本比将程序更改为真正多线程运行更容易。

无论如何,我们依靠 printf() 和输出管道将程序的输出写入日志文件以进行调试。我无法启动适当写入其自己的日志文件的 exe 的单独副本。我玩了很多 exec() 和 system() 函数来获取 EXE 的不同副本以启动和写入日志。我最接近工作的是使用 C 行,例如:

system("start cmd /k call [program commmand and args] > log_file.txt");

这很好用 - 生成单独的命令窗口并为适当的数据集生成单独的程序副本。唯一的问题是命令窗口在程序执行完毕后保持打开状态。我们的一些客户经常在调度程序上运行这个程序,他们无法接受必须手动关闭所有命令窗口。

我试图找到我正在寻找的其他类似命令如下:

system("[program command and args] > log_file.txt"); 

exec("[program command and args] > log_file.txt");

这两个都将执行程序的新副本,正常写入日志文件,并在进程完成时关闭命令窗口,但命令等待新生成的 EXE 完成运行以将控制权返回给启动可执行文件。这显然会阻止多个副本同时运行,而这正是最初的目标,因此这也不是一个好的解决方案。

我还尝试通过附加到退出命令行来尝试将“退出”命令添加到命令行窗口的末尾,希望我可以关闭命令窗口,如下所示:

system("start cmd /k call \"[program commmand and args] > log_file.txt; exit\""); 

没有用。我尝试了一些类似的变体,但永远无法做出正确的行为。

我将不胜感激任何可以获得正确行为的建议。我基本上是想启动一个可执行文件的多个副本,这些副本同时运行并写入单独的日志文件,使用 Windows 命令提示符的“> log_file.txt”输出管道功能。我想避免必须使用线程库(已经有一段时间了,我在时间限制下)或使用 printf() 和输出管道以外的东西,因为这些打印语句在整个应用程序中使用,这将是一个很大的努力有效地替换此时所有的函数调用。

有谁知道使用 system() 调用关闭命令窗口的方法,或者有其他解决问题的简单方法吗?请记住,这涉及到一些时间限制,所以我不一定要寻找最好的方法,而是寻找最快和最简单的方法。我很快就会有机会实现正确的日志记录功能,但我需要先解决这个问题。

最佳答案

你说你的第一个解决方案很好用,只是它在程序执行完毕后不关闭命令窗口。

system("start cmd /k call [program commmand and args] > log_file.txt");

/K 选项声明 执行字符串指定的命令但保持不变

/C 选项声明执行字符串指定的命令然后终止

你应该能够改变你原来的解决方案来使用/C 选项

system("start cmd /C call [program commmand and args] > log_file.txt");

关于c - 从 C 代码生成程序的多个副本并将输出重定向到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18436398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com