gpt4 book ai didi

python - 管道没有这样的文件或目录

转载 作者:行者123 更新时间:2023-11-28 06:19:24 25 4
gpt4 key购买 nike

我正在尝试使用 C++ 创建一个命名管道并在 python 上读取它。这是我的代码:

const int MAX_BUF = 1024;
string wr_string = "Hi.";
char text[MAX_BUF] = "";
strcpy(text, wr_string.c_str());
int fd = open("/tmp/test", O_WRONLY); // Open the pipe
write(fd,text,MAX_BUF); // Write
close(fd); // Close the pipe - allow the read

我是这样读的:

import os
import time

pipe = open("/tmp/OKC_avgprice", "r")
line = pipe.read()
pipe.close()

print line

然而,每次我尝试阅读它时,我都会得到:

Traceback (most recent call last):
File "ipc.py", line 4, in <module>
pipe = open("/tmp/test", "r")
IOError: [Errno 2] No such file or directory: '/tmp/test'

编写管道时应该自动创建不是吗?怎么没找到呢?

谢谢!

最佳答案

您的 C++ 代码没有创建命名管道;您必须首先使用 mkfifo 创建命名管道(3):

mkfifo("/tmp/test", 0600) // 0600 means writable and readable by owner only

这样的 fifo 将出现在 ls -laF 上(GNU) 作为

prw-------  1 user  group     0 Apr 12 07:02 test|

值得注意的是,该行将以 p 开头并且会有一个 |在名字之后。管道将保留在磁盘上是(尽管 /tmp 通常在重新启动时清空)。


请注意,如果您尝试使用 O_WRONLY 打开文件,但文件不存在open将失败 ENOENT , 返回 -1作为 fd . open永远不会尝试创建一个只有 O_WRONLY 的新文件;要创建一个新的常规文件,您需要调用

open("/tmp/test", O_WRONLY|O_CREAT, 0600);

其中 0600 是文件所需的模式/权限。

调用 writeclose-1随后将失败 EBADF . 请理解您必须始终检查所有系统调用的返回值。有时在 Stackoverflow 示例中,为了简洁起见,它们被省略了,需要添加检查应该是常识。


写一个C++的内容string , 直接从 .c_str() 写入:

write(fd, wr_string.c_str(), wr_string.length());

还要经常检查 C 函数的错误代码; mkfifo , open , write可能会失败,并且它们会返回一个值 < 0 ,您需要准备好处理这些情况。

关于python - 管道没有这样的文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29576982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com