gpt4 book ai didi

尝试从邮槽读取时 C Readfile 错误 87

转载 作者:太空宇宙 更新时间:2023-11-03 23:50:15 26 4
gpt4 key购买 nike

我正在尝试设置一个我可以写入和读取的邮槽。

但是当调用 ReadFile 时,我得到错误 87。我尝试了 MSDN 的不同方法,但我仍然得到错误 87。

我在我的代码中删除了很多错误处理,以便稍微缩短它。

这是我从 main 进行的调用。

hMailslot= mailslotCreate("\\\\.\\mailslot\\myslot"); //works
hMailslot=mailslotConnect("\\\\.\\mailslot\\myslot"); //works
mailslotWrite(hMailslot,w, lstrlen(w)+1)*sizeof(CHAR); //works
mailslotRead(hMailslot); //Error 87 invalid parameter
mailslotClose(hMailslot); //?

这是我的代码的简化版本。

#define TIME_OUT    MAILSLOT_WAIT_FOREVER 

HANDLE mailslotCreate (char *name) {
HANDLE H = (HANDLE)CreateMailslot(name,0,TIME_OUT,(LPSECURITY_ATTRIBUTES) NULL);
return H;
}

HANDLE mailslotConnect (char * name) {

HANDLE H = CreateFile(name,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
return H;
}

int mailslotWrite(HANDLE mailSlot,void *msg,int msgSize) {

DWORD cbWritten;

WriteFile(mailSlot, msg, msgSize, &cbWritten, (LPOVERLAPPED) NULL);

return cbWritten;

}

int mailslotRead (HANDLE mailbox) {

DWORD cbMessage, cMessage, cbRead;
BOOL fResult;
LPTSTR Message;

fResult =GetMailslotInfo(mailbox,(LPDWORD) NULL,&cbMessage,&cMessage,(LPDWORD)NULL);

if (!fResult) //Works
{
printf("GetMailslotInfo failed with %d.\n", GetLastError());
}

Message = (LPTSTR) calloc(cbMessage,sizeof(char));
Message[0] = '\0';


fResult = ReadFile((HANDLE)mailbox,(LPVOID)Message,(DWORD)cbMessage,LPDWORD)&cbRead,(LPOVERLAPPED) NULL);

if (!fResult) //Error 87
{
printf("ReadFile failed with %d.\n", GetLastError());
free(Message);
return 0;
}
return cbRead;
}

int mailslotClose(HANDLE mailSlot){
return CloseHandle(mailSlot);
}

最佳答案

根据 Microsoft,错误 87ERROR_INVALID_PARAMETER从 ReadFile() 或 WriteFile()

所以这些参数有问题。

同样来自 MS:CreateMailSlot() , CreateFile()ReadFile() 定义

我一直在看Using Mailslots并尝试将其与您拥有的进行比较。我能看到的唯一区别是,即使他们使用 FILE_ATTRIBUTE_NORMAL 创建文件,并使用 (LPOVERLAPPED) NULL 写入文件,他们仍然提供 OVERLAPPED ov 在读取文件时 - 即使他们的文档说它不是必需的。

但是我不知道这是否是实际问题

关于尝试从邮槽读取时 C Readfile 错误 87,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21628763/

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