我想重开stdin
和stdout
(也许stderr
当我在它)的文件句柄,从而使未来的呼叫printf()
或putchar()
还是puts()
会去到一个文件,以及未来的呼叫getc()
和这种将来自一个文件.
1)我不想永久丢失标准输入/输出/错误.我可能希望稍后在程序中重用它们.
2)我不想打开新的文件句柄,因为这些文件句柄必须要么传递很多,要么全局传递(不寒而栗).
3)如果我无法帮助,我不想使用任何open()
或fork()
其他系统相关的功能.
所以基本上,这样做是否有效:
stdin = fopen("newin", "r");
Run Code Online (Sandbox Code Playgroud)
而且,如果确实如此,我怎样才能得到原来的价值stdin
?我是否必须将其存放在一个FILE *
以后才能将其取回?
我有一个实用程序可以输出游戏所需的文件列表.如何在C程序中运行该实用程序并获取其输出,以便我可以在同一程序中对其执行操作?
更新:很好地呼吁缺乏信息.该实用程序吐出一系列字符串,这应该是完全可移植的Mac/Windows/Linux.请注意,我正在寻找一种程序化的方法来执行该实用程序并保留其输出(转到stdout).
我想从C++调用一个python脚本,并希望将此脚本生成的输出.csv文件重新用于C++.我在main()中试过这个:
std::string filename = "/home/abc/xyz/script.py";
std::string command = "python ";
command += filename;
system(command.c_str());
Run Code Online (Sandbox Code Playgroud)
这会调用并执行python脚本.
的print
在Python命令正在执行.调用脚本时,屏幕上会打印出一些内容.到现在为止还挺好.但是,它不是创建.csv文件(同一脚本的一部分).
示例:我有一个training.csv
包含100个条目的文件.我调用了Python脚本,对脚本几乎没有任何更改,因此training.csv
文件现在应该只包含50个条目而不是100个.它被覆盖了.但是,没有这样的事情发生.脚本中的其他命令(print
等)工作正常.
该training.csv
文件是用C++通常使用来读取fstream
和getline
.
知道怎么做(使用Linux)吗?
我想在C++程序中获取Linux命令的输出字符串以及命令输出状态.我在我的应用程序中执行Linux命令.
例如:命令:
rmdir abcd
命令输出字符串:
rmdir:无法删除`abcd':没有这样的文件或目录
命令状态:
1(表示命令失败)
我尝试使用system()
提供输出状态的Linux函数,以及popen()
给出命令输出字符串的函数,但这两个函数都没有给我输出字符串和Linux命令的输出状态.
我正在尝试与一个进程通信(该进程本身写入标准输入和标准输出以在终端中与用户交互)并读取它的标准输入并写入它在 C 中的标准输出。
因此我尝试以编程方式替换 shell 用户。一个隐喻的例子:假设我出于某种原因想在 C 中使用 VIM。然后我还需要编写命令(stdout)并从编辑器(stdin)读取内容。
最初我认为这可能是一项微不足道的任务,但似乎没有标准方法。int system(const char *command);
只是执行一个命令并将命令 stdin/stdout 设置为调用进程之一。
因为这没有任何结果,所以我查看了FILE *popen(const char *command, const char *type);
但手册页指出:
由于管道根据定义是单向的,因此类型参数只能指定读或写,而不是两者;结果流相应地是只读或只写的。
及其含义:
popen() 的返回值在所有方面都是一个普通的标准 I/O 流,除了它必须用 pclose() 而不是 fclose(3) 关闭。 写入这样的流会写入命令的标准输入;该命令的标准输出与调用 popen() 的进程的标准输出相同,除非命令本身对此进行了更改。相反,从“popened”流中读取会读取命令的标准输出,并且命令的标准输入与调用 popen() 的进程的标准输入相同。
因此,使用 popen() 并不是完全不可能,但在我看来非常不优雅,因为我必须解析调用进程的标准输出(调用 popen() 的代码)才能解析从popened 命令(使用 popen 时输入“w”)。
相反,当使用类型“r”调用 popen 时,我需要写入调用进程的 stdin,以便将数据写入 popened 命令。在这种情况下,我什至不清楚这两个进程是否在标准输入中接收到相同的数据......
我只需要控制程序的标准输入和标准输出。我的意思是不能有这样的功能:
stdin_of_process, stdout_of_process = real_popen("/path/to/bin", "rw")
// write some data to the process stdin
write("hello", stdin_of_process) …
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个运行外部程序的程序.
我知道我可以抓住stdout
,我可以一起抓住stdout
,stderr
但问题是我可以抓住stderr
并stdout
分开吗?
我的意思是,例如,stderr
变量STDERR
和stdout
变量STDOUT
.我的意思是我希望他们分开.
另外,我需要在变量中输出外部程序的退出代码.