相关疑难解决方法(0)

从C转发stdin和stdout

我想重开stdinstdout(也许stderr当我在它)的文件句柄,从而使未来的呼叫printf()putchar()还是puts()会去到一个文件,以及未来的呼叫getc()和这种将来自一个文件.

1)我不想永久丢失标准输入/输出/错误.我可能希望稍后在程序中重用它们.

2)我不想打开新的文件句柄,因为这些文件句柄必须要么传递很多,要么全局传递(不寒而栗).

3)如果我无法帮助,我不想使用任何open()fork()其他系统相关的功能.

所以基本上,这样做是否有效:

stdin = fopen("newin", "r");
Run Code Online (Sandbox Code Playgroud)

而且,如果确实如此,我怎样才能得到原来的价值stdin?我是否必须将其存放在一个FILE *以后才能将其取回?

c redirect stdio

62
推荐指数
5
解决办法
12万
查看次数

如何从C运行外部程序并解析其输出?

我有一个实用程序可以输出游戏所需的文件列表.如何在C程序中运行该实用程序并获取其输出,以便我可以在同一程序中对其执行操作?

更新:很好地呼吁缺乏信息.该实用程序吐出一系列字符串,这应该是完全可移植的Mac/Windows/Linux.请注意,我正在寻找一种程序化的方法来执行该实用程序并保留其输出(转到stdout).

c external-process

59
推荐指数
4
解决办法
6万
查看次数

从C++调用Python脚本并使用其输出

我想从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++通常使用来读取fstreamgetline.

知道怎么做(使用Linux)吗?

c++ python python-2.7 python-3.x

23
推荐指数
2
解决办法
6万
查看次数

如何在c ++中获取linux命令输出字符串和输出状态

我想在C++程序中获取Linux命令的输出字符串以及命令输出状态.我在我的应用程序中执行Linux命令.

例如:命令:

rmdir abcd

命令输出字符串:

rmdir:无法删除`abcd':没有这样的文件或目录

命令状态:

1(表示命令失败)

我尝试使用system()提供输出状态的Linux函数,以及popen()给出命令输出字符串的函数,但这两个函数都没有给我输出字符串和Linux命令的输出状态.

c++ linux command

6
推荐指数
1
解决办法
4104
查看次数

与子进程 stdout/stdin 通信

我正在尝试与一个进程通信(该进程本身写入标准输入和标准输出以在终端中与用户交互)并读取它的标准输入并写入它在 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)

c linux ipc stdout pipe

6
推荐指数
1
解决办法
1万
查看次数

在C++中从外部程序中捕获stderr和stdout

我正在尝试编写一个运行外部程序的程序.

我知道我可以抓住stdout,我可以一起抓住stdout,stderr但问题是我可以抓住stderrstdout分开吗?

我的意思是,例如,stderr变量STDERRstdout变量STDOUT.我的意思是我希望他们分开.

另外,我需要在变量中输出外部程序的退出代码.

c++ linux

5
推荐指数
1
解决办法
1733
查看次数

标签 统计

c ×3

c++ ×3

linux ×3

command ×1

external-process ×1

ipc ×1

pipe ×1

python ×1

python-2.7 ×1

python-3.x ×1

redirect ×1

stdio ×1

stdout ×1