Найти - Пользователи
Полная версия: Named pipe access violation
Начало » Python для новичков » Named pipe access violation
1
3ka5_cat
Доброго времени суток!
Создал named pipe между двумя программами на питоне. Спустя некоторое время своей работы, одна программа должна отправить сообщение в пайп второй. Все это время, вторая программа в цикле читает из пайпа.
При запуске второй программы, во время ReadFile() возникает эксепшн:
WindowsError: exception: access violation writing 0x1D1A9FD8

Создание пайпа в первой проге:
DBwrFuz = CreateNamedPipe("\\\\.\\pipe\\DBwr-Fuz-pipe", # pipe name
        PIPE_ACCESS_DUPLEX,       # read/write access
        PIPE_TYPE_MESSAGE |       # message type pipe
        PIPE_READMODE_MESSAGE |   # message-read mode
        PIPE_WAIT,                # blocking mode
        PIPE_UNLIMITED_INSTANCES, # max. instances
        BUFSIZE,                  # output buffer size
        BUFSIZE,                  # input buffer size
        0,                        # client time-out
        None)                     # default security attribute
if DBwrFuz == -1:
        print "Error! Create DBwr-Fuz pipe " + str(GetLastError())
        return -1

Открытие пайпа и чтение во второй:
hDBwrFuz = CreateFile("\\\\.\\pipe\\DBwr-Fuz-pipe",
        GENERIC_WRITE | GENERIC_READ,
	FILE_SHARE_READ | FILE_SHARE_WRITE,
	None, OPEN_EXISTING,
	FILE_ATTRIBUTE_NORMAL, None)
if hDBwrFuz == -1:
	print "Error! Open DBwr-Fuz pipe " + str(GetLastError())
	return -1
while True:
        try:
            msg_size, msg = ReadFile(hDBwrFuz, 512)
        except pywintypes.error, exc:
            if exc[0] not in [winerror.ERROR_BROKEN_PIPE,]:
                raise
#      except Exception as e:
           #Fuzzer terminated!
#          print(e)
#          break

Где я неправ?
3ka5_cat
Поправил с помощью PeekNamedPipe():
while True:
    try:
        (nRead, nAvail, nMessage) = PeekNamedPipe(hDBwrFuz, 0)
        if nAvail:
            (msg_size, msg ) = ReadFile(hDBwrFuz, nAvail)
3ka5_cat
Кстати, не поправил. Все еще актуально. Когда приходит сообщение и проходит проверку через PeekNamedPipe, nAvail равно длине сообщения, но все равно та же самая ошибка выскакивает. Да и PeekNamedPipe какое-то странное решение…
3ka5_cat
Ошибка глупейшая:
пытался использовать windll.kernel32.ReadFile с аргументами для win32file.ReadFile вместо win32file.ReadFile
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB