- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一般来说,我正在创建两个 fifo 队列,供我的 .c 和 .py 程序读取和写入。为了使我的 .c 程序能够与 python 交互,我添加了 <python2.7/Python.h>
图书馆。
首先,我的 .c 程序创建一个名为 CFifo 的文件,并使用 fprintf 向其中写入文本。没问题。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <python2.7/Python.h>
int main() {
FILE *CFifo, *pythonFifo, *pythonFile;
char buffer[1024];
// declare python
Py_SetProgramName("writer.py");
// init python
Py_Initialize();
// open python
pythonFile = fopen("writer.py", "r");
// C writes to file, python reads from this file
CFifo = fopen("./CFifo", "w");
// Print strings to file using fprintf
fprintf(CFifo, "This is a test");
// close file python reads
fclose(CFifo);
我的 C 程序的第二部分应该读取我的 python 程序写入的信息(在第二个 fifo 队列中),但在打开 ./pythonFifo
时它只是卡在终端中。 .
// make second fifo queue
// python writes to this file, C reads from it
mkfifo("./pythonFifo", 0777);
// run python program
PyRun_SimpleFile(pythonFile, "writer.py");
pythonFifo = fopen("./pythonFifo", "r");
while(fgets (buffer, sizeof(buffer), pythonFifo)) {
printf("%s", buffer);
}
// close python
Py_Finalize();
fclose(pythonFifo);
remove("./pythonFifo");
return 0;
}
这是负责写入 fifo 队列的 python 部分。
# open fifo file that python writes to
filename_write = "./pythonFifo"
pipe = os.open(filename_write, os.O_WRONLY)
for output in finalStringList:
os.write(pipe, output)
os.close(pipe)
第二个文件的目的是写入从第一个文件读取的修改信息。
最佳答案
你无法从这里到达那里。从 mkfifo
手册页...
Once you have created a FIFO special file in this way, any process can open it for reading or writing, in the same way as an ordinary file. However, it has to be open at both ends simultaneously before you can proceed to do any input or output operations on it. Opening a FIFO for reading normally blocks until some other process opens the same FIFO for writing, and vice versa.
双方都需要打开文件才能继续。但由于 PyRun_SimpleFile
同步运行 python 脚本,因此永远不会到达打开文件的后面的 C 代码。如果您尝试先在 C 代码中打开它,它会在运行 python 代码之前挂起。你遇到了典型的僵局。
我在您的示例中添加了几个打印,并且能够看到程序的进展,就像我在单独的控制台中执行 cat pythonFifo
和 echo foo > pythonFifo
一样。它当然返回了垃圾,但证明了问题所在。
实际上,您可以从这里到达那里(同样是手册页)
See fifo(7) for nonblocking handling of FIFO special files.
但是如果你的Python代码写入的内容超出了管道的容纳范围,你就会陷入更多的僵局。您最好让 python 程序写入某个变量,然后让 C 代码从那里读取它。
关于python - 在 C 和 Python 之间读写 Fifo 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39948721/
我用 chown 不行。 Bilals-MBP:~ $ sudo mkdir -p /data/db Password: mkdir: /data/db: Read-only file system
我陷入了一个非常简单的问题。 我正在尝试制作一个Qt GUI应用程序以从GUI控制我的Arduino(而不是从Arduino IDE的串行监视器控制它)。我能够使用QSerialPort write(
我正在尝试使用 Win32 的 CreateFile 函数打开一个 COM 端口。我已经在 MSDN 以及几个论坛上阅读了有关如何执行此操作的文档,但无论我做什么,我仍然收到错误代码 #2(端口不存在
我正在尝试使用系统调用 read() 和 write()。以下程序创建一个文件并将一些数据写入其中。这是代码.. int main() { int fd; open("stud
我对 Xcode 和 sqlite 有点陌生。现在我有一个名为“mydb.db”的数据库文件,它已经有一些表和数据。我把它放在我的 mac 文件夹中,然后将它拖到“支持文件”下的 Xcode 项目中。
背景:如果需要,请跳至问题部分 我正在研究测试设备的前端。前端的目的是为了更容易编写长测试脚本。几乎只是让它们更易读和可写。 设备将使用 Prologix GPIB-USB Controller 进行
本文实例讲述了python文件常见操作。分享给大家供大家参考,具体如下: 1.文件是什么? 文件是存储在外部介质上的数据或信息集合,程序中源程序、数据中保存的数据、图像中的像素数据等等; 文件
C++0x 指定 std::atomic线程安全原子访问变量的模板。这个模板有一个成员函数 std::atomic::exchange原子地在“this”中存储一个新值并检索“this”的现有值。 W
VBA 中是否有任何方法可以读取和写入 INI 文件?我知道我可以使用; Open "C:\test.ini" For Input As #1 ...并解析数据。相反,我试图查看已有哪些工具可用。 我
我最近在 GitHub 存储库 system-design-primer 上看到了系统设计示例,它显示了读/写 API。我正在尝试实现 this one 以进行练习。大纲是这样的。 它分离了读写API
我在使用 DEVMODE 结构的 dmColor 字段时遇到问题。 我的默认打印机是彩色打印机,如果我通过控制面板将打印机属性的颜色默认输出为黑白,则 DEVMODE.dmColor 字段始终返回 D
我知道套接字等如何与 java/android 配合使用,但是如何使用 java 或 python 连接到桌面上的 COM 端口?您想使用地址吗?或者查找您想要的端口是否可用或者什么? 我不知道该怎么
什么构成 DynamoDB 中的实际读取? 它是读取表格中的每一行还是返回什么数据? 这就是扫描如此昂贵的原因 - 您读取整个表格并为读取的每一行表格付费吗? 能否将 ElasticCache (Me
我想用Java编写一个程序来检查src是否存在(如果不抛出FileNoot的话) 并将src.txt的内容复制到des.txt 并在开头和结尾处打印两个文件的大小 输出为: src.txt is in
我在 C++ 中有一个 float 数组,我想将它保存到一个二进制文件中(以节省空间),以便以后能够再次读取它。为此,我编写了以下代码来编写数组: float *zbuffer = new float
我试图为 websocket 创建一个 Read\Write 函数,但我遇到了一个问题...... var inarrivo = 0; var risposta = ""; function RDW_
在我的应用程序中是用 Qt 编写的,我有一个 QGraphicsScene。在这个 QgraphicsScene 中有一个图像和一些由用户绘制的项目。我想保存这个包含所有内容的 QgraphicsSc
我正在编写一个程序,该程序应该无限期运行并保持变量的值。其他两个程序可以更改变量的值。我使用命名管道接收变量值并将其发送到外部程序。 这是我的变量管理器代码。 manager.c: #includ
我和一位老师谈过,他告诉我读写系统调用使用缓冲区,因为在你的系统规范中有一个变量控制你可以访问你想要读/写的设备的次数on,系统在他等待写入设备时使用buffer来存储数据。 我在另一篇 Stack
我运行一个方法,有三个部分,第 1 部分和第 3 部分都是“读取文本文件”, 第二部分是将字符串保存到文本文件, // The Save Path is the text file's Path, u
我是一名优秀的程序员,十分优秀!