Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将UNIX管道映射到C++;标准::cout 我正在研究C++中的通信过程选项。从将Unix管道绑定到std::cout的想法开始,但我可以让它工作。当使用write(STDOUT_FILENO)直接编写时,我得到了预期的结果。当使用std::cout编写时,我会得到更小的随机输出 #include <iostream> #include <unistd.h> #include <fcntl.h> const int PIPE_READ = 0; const int PIPE_WRITE = 1; int main() { int pfd[2]; if(pipe(pfd) == -1){ std::cout << "Cannot create pipe" << std::endl; return 0; } int pid = fork(); if(pid == -1){ std::cout << "Error on fork: " << errno << std::endl; } else if(pid == 0) { // Child process if(dup2(pfd[PIPE_WRITE],STDOUT_FILENO) < 0) { std::cout << "Cannot redirect STDOUT: " << errno << std::endl; return 0; } close(pfd[PIPE_WRITE]); for(int i = 0; i < 8; i++){ int data = i; write(STDOUT_FILENO,&data,sizeof(int)); // Works //std::cout << data; // Don't work } } else { // Parent process close(pfd[PIPE_WRITE]); for(int i = 0; i < 8; i++){ int data; ssize_t status; if((status = read(pfd[PIPE_READ],&data,sizeof(int))) != sizeof(int)) { std::cout << "Error (" << errno << ") on read: " << status << std::endl; return -1; } std::cout << data << std::endl; } } return 0; } #包括 #包括 #包括 管道内常数读数=0; const int PIPE_WRITE=1; int main(){ int-pfd[2]; 如果(管道(pfd)=-1){ 让我们仔细看看你的写作: write(STDOUT_FILENO,&data,sizeof(int)); // Works //std::cout << data; // Don't work_C++_Unix_Pipe_Stdout - Fatal编程技术网

将UNIX管道映射到C++;标准::cout 我正在研究C++中的通信过程选项。从将Unix管道绑定到std::cout的想法开始,但我可以让它工作。当使用write(STDOUT_FILENO)直接编写时,我得到了预期的结果。当使用std::cout编写时,我会得到更小的随机输出 #include <iostream> #include <unistd.h> #include <fcntl.h> const int PIPE_READ = 0; const int PIPE_WRITE = 1; int main() { int pfd[2]; if(pipe(pfd) == -1){ std::cout << "Cannot create pipe" << std::endl; return 0; } int pid = fork(); if(pid == -1){ std::cout << "Error on fork: " << errno << std::endl; } else if(pid == 0) { // Child process if(dup2(pfd[PIPE_WRITE],STDOUT_FILENO) < 0) { std::cout << "Cannot redirect STDOUT: " << errno << std::endl; return 0; } close(pfd[PIPE_WRITE]); for(int i = 0; i < 8; i++){ int data = i; write(STDOUT_FILENO,&data,sizeof(int)); // Works //std::cout << data; // Don't work } } else { // Parent process close(pfd[PIPE_WRITE]); for(int i = 0; i < 8; i++){ int data; ssize_t status; if((status = read(pfd[PIPE_READ],&data,sizeof(int))) != sizeof(int)) { std::cout << "Error (" << errno << ") on read: " << status << std::endl; return -1; } std::cout << data << std::endl; } } return 0; } #包括 #包括 #包括 管道内常数读数=0; const int PIPE_WRITE=1; int main(){ int-pfd[2]; 如果(管道(pfd)=-1){ 让我们仔细看看你的写作: write(STDOUT_FILENO,&data,sizeof(int)); // Works //std::cout << data; // Don't work

将UNIX管道映射到C++;标准::cout 我正在研究C++中的通信过程选项。从将Unix管道绑定到std::cout的想法开始,但我可以让它工作。当使用write(STDOUT_FILENO)直接编写时,我得到了预期的结果。当使用std::cout编写时,我会得到更小的随机输出 #include <iostream> #include <unistd.h> #include <fcntl.h> const int PIPE_READ = 0; const int PIPE_WRITE = 1; int main() { int pfd[2]; if(pipe(pfd) == -1){ std::cout << "Cannot create pipe" << std::endl; return 0; } int pid = fork(); if(pid == -1){ std::cout << "Error on fork: " << errno << std::endl; } else if(pid == 0) { // Child process if(dup2(pfd[PIPE_WRITE],STDOUT_FILENO) < 0) { std::cout << "Cannot redirect STDOUT: " << errno << std::endl; return 0; } close(pfd[PIPE_WRITE]); for(int i = 0; i < 8; i++){ int data = i; write(STDOUT_FILENO,&data,sizeof(int)); // Works //std::cout << data; // Don't work } } else { // Parent process close(pfd[PIPE_WRITE]); for(int i = 0; i < 8; i++){ int data; ssize_t status; if((status = read(pfd[PIPE_READ],&data,sizeof(int))) != sizeof(int)) { std::cout << "Error (" << errno << ") on read: " << status << std::endl; return -1; } std::cout << data << std::endl; } } return 0; } #包括 #包括 #包括 管道内常数读数=0; const int PIPE_WRITE=1; int main(){ int-pfd[2]; 如果(管道(pfd)=-1){ 让我们仔细看看你的写作: write(STDOUT_FILENO,&data,sizeof(int)); // Works //std::cout << data; // Don't work,c++,unix,pipe,stdout,C++,Unix,Pipe,Stdout,上面的行相当于您的write系统调用 同样重要的是,以原始格式编写int将写入sizeof(int)字节,通常为四个。将一位整数写入文本将写入一个字节 您的循环将写入8个数字,这意味着它将写入32个字节(4*8)如果使用代码>写< /COD>。如果输出使用小错误:),我假设CUT可以根据所提供的数据类型输出字符串和二进制数据。另一种是文件描述符的更改没有反映在C++ STD::CUT对象中。谢谢。 std::cout.write(reinterpret_cast<char*>(&a

上面的行相当于您的
write
系统调用


同样重要的是,以原始格式编写
int
将写入
sizeof(int)
字节,通常为四个。将一位整数写入文本将写入一个字节

您的循环将写入8个数字,这意味着它将写入32个字节(4*8)如果使用代码>写< /COD>。如果输出使用<代码>小错误:),我假设CUT可以根据所提供的数据类型输出字符串和二进制数据。另一种是文件描述符的更改没有反映在C++ STD::CUT对象中。谢谢。
std::cout.write(reinterpret_cast<char*>(&data), sizeof data);