Я бы хотел передать несколько байтов данных, хотя труба для его построения из python.Окна труб: пишите из C - читайте в Python
Я начал с некоторых фрагментов, которые я нашел здесь, но я не могу заставить их работать.
Я создал трубу, как это:
int main(void){
HANDLE hPipe;
char buffer[24];
DWORD dwRead;
hPipe = CreateNamedPipe(TEXT("\\\\.\\pipe\\Pipe"),
PIPE_ACCESS_DUPLEX | PIPE_TYPE_BYTE | PIPE_READMODE_BYTE, // FILE_FLAG_FIRST_PIPE_INSTANCE is not needed but forces CreateNamedPipe(..) to fail if the pipe already exists...
PIPE_WAIT,
1,
24 * 16,
24 * 16,
NMPWAIT_USE_DEFAULT_WAIT,
NULL);
while (hPipe != INVALID_HANDLE_VALUE)
{
if (ConnectNamedPipe(hPipe, NULL) != FALSE) // wait for someone to connect to the pipe
{
while (ReadFile(hPipe, buffer, sizeof(buffer) - 1, &dwRead, NULL) != FALSE)
{
/* add terminating zero */
buffer[dwRead] = '\0';
/* do something with data in buffer */
printf("%s", buffer);
}
}
DisconnectNamedPipe(hPipe);
}
return 0;}
Если я выполнить следующий код он пишет но часть блоков чтения:
import time
import struct
f = open(r'\\.\\pipe\\Pipe', 'r+b', 0)
i = 1
sss='ccccc'
while True:
s = sss.format(i)
i += 1
f.write(struct.pack('I', len(s)) + s) # Write str length and str
f.seek(0) # EDIT: This is also necessary
print 'Wrote:', s
n = struct.unpack('I', f.read(4))[0] # Read str length
s = f.read(n) # Read str
f.seek(0) # Important!!!
print 'Read:', s
time.sleep(2)
Я попытался комментирование часть ReadFile в C но это не сработало. Есть ли другой способ достичь этого? Я хочу писать с C и читать с python. Я пробовал писать в трубку с CreateFile (с C), и он работал, как ожидалось. Мне нужна только часть чтения с python.
Труба представляет собой поток данных, который перемещается вперед - вы не можете искать назад к началу потока. –
Что делает 'r + b', (режим, который вы открываете 'f', перед тем, как пытаться написать ему), означает в Python? –
на большинстве систем труб является однонаправленным соединением. один объект пишет, другой читает. если вам нужно двунаправленное соединение, вам понадобятся две трубы. В примере на python вам нужно открыть трубку два раза - для чтения и записи для записи. – furas