Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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
C++ 在两个端子(命名管道)之间传递缓冲区_C++_Linux_Named Pipes - Fatal编程技术网

C++ 在两个端子(命名管道)之间传递缓冲区

C++ 在两个端子(命名管道)之间传递缓冲区,c++,linux,named-pipes,C++,Linux,Named Pipes,我为这个糟糕的标题道歉,因为我不知道该怎么说。在C++中,我必须为作业指定一个命名管道。我知道命名管道是如何工作的,以及每一行应该做什么,但我遇到了一个我和一个代码相同的朋友无法解决的问题 这是一项简单的任务。我所要做的就是让一个程序创建命名管道,并将用户输入的字符数组放入其中。第二个程序(在它自己的终端中)只是从管道中读取字符数组并在终端中输出 #include <fcntl.h> #include <sys/types.h> #include <sys/stat

我为这个糟糕的标题道歉,因为我不知道该怎么说。在C++中,我必须为作业指定一个命名管道。我知道命名管道是如何工作的,以及每一行应该做什么,但我遇到了一个我和一个代码相同的朋友无法解决的问题

这是一项简单的任务。我所要做的就是让一个程序创建命名管道,并将用户输入的字符数组放入其中。第二个程序(在它自己的终端中)只是从管道中读取字符数组并在终端中输出

#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <iostream>
#include <string>
using namespace std;

int main() {
    int a, b, c, res;
    string input;
    char buffer [50];
    b = access("/tmp/myfifo", F_OK);
    if (b == -1)
        a = mkfifo("/tmp/myfifo", 0777);
    c = ("/tmp/myfifo", O_WRONLY);
    getline(cin, input);
    for (int i = 0; i < input.size(); i++)
        buffer[i] = input.at(i);
    res = write(c, buffer, 50);
    close(c);
    return 0;
}
在下面第11行的第二个程序(c=open(“/tmp/myfifo”,O_RDONLY);)中,该程序似乎从未运行该行。当我在终端中运行它时,什么也没发生,它就好像处于死锁状态。我的朋友没有这个问题,我们也不知道是什么原因造成的。我在Ubuntu 14.04.3上运行,在一个虚拟的盒子里使用默认的终端

#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <iostream>
#include <string>
using namespace std;

int main() {
    int a, b, c, res;
    string input;
    char buffer [50];
    b = access("/tmp/myfifo", F_OK);
    if (b == -1)
        a = mkfifo("/tmp/myfifo", 0777);
    c = ("/tmp/myfifo", O_WRONLY);
    getline(cin, input);
    for (int i = 0; i < input.size(); i++)
        buffer[i] = input.at(i);
    res = write(c, buffer, 50);
    close(c);
    return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
INTA、b、c、res;
字符串输入;
字符缓冲区[50];
b=访问(“/tmp/myfifo”,F_OK);
如果(b==-1)
a=mkfifo(“/tmp/myfifo”,0777);
c=(“/tmp/myfifo”,仅限O_wro);
getline(cin,输入);
对于(int i=0;i

#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
INTC,res;
字符缓冲区[50];
c=打开(“/tmp/myfifo”,仅限ordu);
res=读取(c,缓冲器,50);
关闭(c);

cout发件人第16行的
open
一词似乎丢失了

c = open("/tmp/myfifo", O_WRONLY);
如果没有该词,程序将调用逗号运算符,该运算符将为
c
指定
O_WRONLY
的值,如前所述

我在运行此程序时注意到的另一个独立错误是,您没有在发送方端初始化
缓冲区
,这意味着接收方可能会在实际字符串之后读取垃圾,因为没有空终止符

char buffer [50];
memset(buffer, 0, 50);

您似乎缺少发件人第16行的单词
open

c = open("/tmp/myfifo", O_WRONLY);
如果没有该词,程序将调用逗号运算符,该运算符将为
c
指定
O_WRONLY
的值,如前所述

我在运行此程序时注意到的另一个独立错误是,您没有在发送方端初始化
缓冲区
,这意味着接收方可能会在实际字符串之后读取垃圾,因为没有空终止符

char buffer [50];
memset(buffer, 0, 50);

我一直在问我的朋友那里是否有问题!!!我有一种感觉,这是个问题,但我不确定需要去那里做什么。管道现在正在工作,但我得到了垃圾,就像你说的那样。我试图添加你给我的memset行,但我得到了一个编译错误。它应该是在发送方文件中还是在接收方文件中r文件?发送方文件。你需要
include
用于memset…老实说,我不知道#include和#include不同。#include和#include之间有什么区别吗?我在高中上课时使用了.h文件,但在大学里从未使用过一次。@user2872777,我不怪你。
string.h
是C头,而 String 是一个C++头。我还没有真正看到“<代码> >包含最近。你可以看到更多的细节。好的,我非常感激。谢谢你:)我一直问我的朋友是否有问题。!我有一种感觉,这是一个问题,但我不确定需要去那里。管道现在工作,但我正在得到垃圾。最后就像你说的那样我会的。我尝试添加你给我的memset行,但是我得到了一个编译错误。它应该在发送方文件还是接收方文件中?发送方文件。你需要
include
用于memset…老实说,我不知道#include和#include不同。include和#include之间有区别吗?我在高中时上过课,但在大学里从来没有用过.h文件。@ USER 8727 77,我不怪你。<代码> String。h < /C>是C标题,而 String 是C++头。我还没有真正看到<>代码>包含最近。你可以看到更多的细节。好的,我非常感激。谢谢: