- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在Linux中使用“CreatePipe”和“CreateProcessW”功能,当我在Linux中编译C++代码时,出现一些错误,如下所示:在此范围内未声明“CreatePipe”。未在此范围内声明“CreateProcessW”。
最佳答案
Posix / Linux:
int pipe(int pipefd[2]);
pipefd[0]
指向管道的读取端。
pipefd[1]
指向管道的写入端。
int pipe2(int pipefd[2], int flags);
CreateProcess
,只需几个步骤即可完成Posix / Linux版本。
fork()
创建一个新进程-仍在运行相同的程序-因此,两个进程现在将从调用fork()
的同一点继续运行同一程序。通过检查fork()
的返回值(进程ID)来确定是父进程还是子进程。 dup
pipe
返回的文件描述符,使用int dup2(int oldfd, int newfd);
替换新过程的stdin
和stdout
。 exec*
函数之一在新进程中执行程序。// create pipes here
if(pid_t pid = fork(); pid == -1) {
// fork failed
} else if(pid == 0) { // child process goes here (with a new process id)
// dup2(...)
// exec*()
} else { // parent process goes here
// do parenting stuff
}
#include <unistd.h>
#include <sys/types.h>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <stdexcept>
struct Pipe {
Pipe() {
if(pipe(io)) throw std::runtime_error("pipe failure");
}
~Pipe() {
close_rd();
close_wr();
}
void close_rd() { closer(io[0]); }
void close_wr() { closer(io[1]); }
int rd() { return io[0]; }
int wr() { return io[1]; }
private:
void closer(int& fd) {
if(fd != -1) {
close(fd);
fd = -1;
}
}
int io[2];
};
int main() {
Pipe parent_write, parent_read;
if(pid_t pid = fork(); pid == -1) {
// fork failed
return 1;
} else if(pid == 0) { // child process goes here (with a new process id)
// close file descriptors we don't need:
parent_write.close_wr();
parent_read.close_rd();
// duplicate into the place where stdin/stdout was
dup2(parent_write.rd(), fileno(stdin));
dup2(parent_read.wr(), fileno(stdout));
// execute a program
execl("/bin/ls", "/bin/ls", nullptr);
// exec* functions never returns if successful, so if we get here, it failed:
std::exit(1);
} else { // parent process goes here
std::cout << "child process " << pid << " started\n";
}
// close file descriptors we don't need:
parent_write.close_rd();
parent_read.close_wr();
// read data from child process using the file descriptor in parent_read.rd()
char buf[1024];
ssize_t rv;
while((rv = read(parent_read.rd(), buf, 1024))) {
write(fileno(stdout), buf, static_cast<size_t>(rv));
}
// use write(parent_write.wr(), ...) to write to the child.
}
关于c++ - 在Linux中这里有 “CreatePipe”和 “CreateProcessW”函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60282917/
我尝试使用 C# 创建管道。代码非常简单,但是当执行带有 CreatePipe() 调用的行时,我得到一个 System.AccessViolationException 并显示以下错误消息: Att
我正在尝试将推箱子求解器(用 C++ 编写)添加到我的 C# 程序中(我的程序中有一个类可以处理 C++ 接口(interface)的编码)。我的程序加载了加载 solver.exe 的 solver
我正在尝试弄清楚如何在 ContentProvider.openFile 中传递数据流。要发送的数据是在 JNI 中创建的。我尝试使用传输线程创建管道,但由于管道损坏而遇到了很多麻烦。所以我想我可以将
如何在Linux中使用“CreatePipe”和“CreateProcessW”功能,当我在Linux中编译C++代码时,出现一些错误,如下所示:在此范围内未声明“CreatePipe”。未在此范围内
我有一个使用 ContentProvider 类的应用程序。在 openFile 方法中,我需要能够解码文件并作为数据流返回。所以我决定使用内置管道。 问题是如果我使用 createPipe 方法,我
我目前有这个代码: main :: IO () main =
请注意,虽然我是在 Android 环境下问这个问题,但它更像是一个关于 pipe(2) 的一般 unix 问题 ... 要将大量数据从一个进程传输到另一个进程,可以使用 ParcelFileDesc
我正在尝试使用 CreateProcess 和 CreatePipe 从 Visual Studio 2010 中的 Windows 窗体 C++/CLR 应用程序中执行进程。 在我的 Windows
与 my recent question on MediaRecorder and createPipe() 相关,并在 this other SO question 中讨论了 createPipe(
我正在尝试制作一个录制音频的示例,数据存储由应用程序处理,而不是 MediaRecorder。用例包括将录音存储在内部存储器上或加密录音。 原则上,这应该使用 createPipe() 在 Parce
How to read output from cmd.exe using CreateProcess() and CreatePipe() 我一直在尝试创建一个子进程来执行 cmd.exe,命令行指
我想通过使用 ParcelFileDescriptor.createPipe() 将 InputStream 从一个 Android 服务“发送”到在不同进程中运行的另一个服务。 ,一个流到流的复制线
我是一名优秀的程序员,十分优秀!