在c++中使用popen连续写入子进程
Continuously write to subprocess using popen in C++
我需要使用popen打开子进程,该进程将不断要求用户输入…主进程需要通过管道发送该数据。
这是我的第一次尝试:
FILE *in;
char buff[1024];
if(!(in = popen("cd FIX/fix2/src; java -cp .:./* com.fix.bot", "w"))){
return 1;
}
while(1){
char buffer[] = { 'x' };
fwrite(buffer, sizeof(char), sizeof(buffer), in);
cout << "Wrote!" << endl;
usleep(1000000);
}
但是数据没有发送!我需要使用pclose()关闭管道,以便将数据写入进程。我如何确保写入数据而不必每次都关闭管道?
您需要调用fflush(in)
以确保缓冲的数据实际上被写入流。
还要检查命令中的java -cp .:./*
没有展开为无效的类路径。我认为,如果当前目录中有多个文件,那么最终将扩展为几个参数,而不是实际的类路径条目。
这个适合我:
#include <stdio.h>
#include <unistd.h>
#include <iostream>
int main(int argc, char ** argv) {
FILE *in;
char buff[1024];
if(!(in = popen("./2.sh", "w"))){
return 1;
}
while(1) {
char buffer[] = "xxn";
fwrite(buffer, sizeof(char), sizeof(buffer), in);
fflush(in);
std::cout << "Wrote!" << std::endl;
usleep(1000000);
}
}
#!/bin/sh
read INP
echo 'read: ' $INP
所以我真的怀疑问题是缺少n
相关文章:
- 终止 QProcess 不会终止子进程
- 这种用于查找连续子数组中最大和的递归算法有什么优势吗?
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 子进程更新共享 mmap 内存,但父进程没有更改
- 使用 waitpid 时等待子进程终止
- 使用重定向标准处理子进程中的 kbhit
- 由 JOB 中的进程启动的子进程是否可以将 JOB 属性设置为脱离作业?
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- kill() 总是返回 0(成功),即使在子进程已经结束之后?
- 查找连续子数组的第二小和
- 父进程和子进程之间的 POSIX 信号量
- 检测到由于操作系统内存不足而导致子进程终止
- 使用system()创建独立的子进程
- 从stdin读取时子进程挂起(fork/dup2竞争条件)
- 在 Bash 脚本中处理来自子进程的信号
- Qt C++ - 如何成功将数据传递给子进程?
- 非重叠连续子数组的最大长度总和
- C++ 窗口本地系统模拟在子进程中失败
- 用于查找连续子数组的最大总和的代码使测试用例失败
- 在c++中使用popen连续写入子进程