草庐IT

c - Windows命名管道问题

我正在编写一个通过命名管道与用户空间应用程序通信的驱动程序。用户态应用程序通过调用CreateNamedPipe()创建命名管道,然后通过调用IOCTL将管道名称传递给驱动程序。然后,驱动程序通过调用ZwCreateFile()打开管道。然后,用户态应用程序进入一个循环,从管道读取请求、处理请求并将结果写回管道,即:while(1){ReadFromPipeProcessRequestWriteToPipe}驱动程序基本上是将请求写入管道,然后直接读回答案:WriteRequestToPipeReadAnswerFromPipe我的问题是,如果ReadAnswerFromPipe在应用

c - read() 只从文件中读取几个字节

我想使用read()函数读取文件的内容。我尝试了以下方法:#defineBUFFER_LENGTH(1024)charbuffer[BUFFER_LENGTH];//Thefirstversionofthequestionhadatypo://voidread_file(constcharfilename)//Thiswouldproduceacompilerwarning.voidread_file(constchar*filename){ssize_tread_bytes=0;//Thefirstversionhadthemodeinhexinsteadofoctal.////in

c - 抢先将文件放入 Windows 页面缓存

我有一个用C语言编写的程序,允许用户滚动显示大约不计其数的小文件。每个文件在显示给用户之前都需要经过一定数量的处理(只读)。我已经实现了一个缓冲区,可以在用户位置周围一定半径范围内预处理文件,因此如果他们线性地处理它们,则不会有太多延迟。由于各种原因,我实际上一次只能在一个文件上运行我的处理算法(尽管我可以打开多个文件,并且可以从中读取)所以我的缓冲区按顺序加载。我的处理算法已尽可能优化,但我遇到了I/O问题。起初,我的加载过程很慢,但是当文件被访问几次后,速度提高了大约5倍。因此,我强烈怀疑是什么让我慢下来是在等待Windows页面缓存将我的文件拉入内存。我对那种事情知之甚少。如果我

c - 如何将我的 iSCSIinitiator 连接到 Windows 中的 scsi 子系统

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭4年前。Improvethisquestion我正在研究如何在Windows中使用C编写iSCSI启动器(例如Open-iSCSI(Linux)或StarwindiSCSI启动器(Windows))。我以前编写过一个iSCSI目标,现在我正在学习它的反面。我已经将大部分发起者编码为目标消息(登录、读/写等)。我现在的问题是如何将我的iSCSI启动器连接到Windows中的SCSI子系统,它负责发送要读/写的lba

c++ - 在 DLL 中的哪里调用 LoadLibrary?

我正在制作一个DLL,它使用LoadLibrary动态加载另一个DLL(winsock)。我读到我不应该在DllMain中调用LoadLibrary,但我反复使用它并且不想每次使用它时都必须调用LoadLibrary/GetProcAddress。所以我的问题是:在DLL中调用LoadLibrary的最佳位置在哪里?LoadLibrary/GetProcAddress有多快?在每个函数中都这样做是不是开销很大? 最佳答案 创建一个在DllMain之外进行设置的初始化函数。您的代码会在加载DLL后调用该函数,然后它可以调用完成初始化所

c - 读写互斥

我正在为关键部分使用互斥锁。我有一个设计约束,1)如果在2个不同的线程中发生2次读取,则临界区应该对两者都可用。2)如果发生写操作,那么应该阻塞其他线程的读操作3)如果发生读取,则应阻止在其他线程上写入。我不知道如何使用Createmutex、openmutex、waitforsingleobject和releasemutexapi执行此操作。 最佳答案 您正在寻找的是Reader-Writerlock.互联网上有一些实现,例如thisone. 关于c-读写互斥,我们在StackOver

c - _beginthread 和 WaitForSingleObject

我正在实现一个启动4个线程的程序。函数是:void*SOURCE_in(structSOURCE_1*);void*SOURCE_out(structSOURCE*);void*SINK_out(structSINK_1*);void*SINK_in(structSINK*);这些函数允许4个block之间进行通信。Block1与Block2通信。block2与第三block共享信息。Block3与Block4进行信息通信。我的问题在main.c中intmain(intargc,char**argv){externintp,e_source,e_sink_1,l_sink,l_sour

c++ - 在 wcscpy_s 之后读取字符串的字符时出错

wcscpy_s函数有问题。在wcscpy_s返回后,我的函数的参数(stringOne和stringTwo)不可读。这是显示问题的简单演示。voidtestFunc(LPCWSTRstringOne,LPCWSTRstringTwo){wchar_t*defaultVal=L"Default";wchar_ttmp[100];intlenBefore=wcslen(stringOne);//Worksautoresult=wcscpy_s(tmp,sizeof(tmp),defaultVal);intlen=wcslen(tmp);intlen2=wcslen(stringOne);

c - C编译程序使用哪些段?

我在OSDevwiki上读到,x86架构的保护模式允许您为代码和数据创建单独的段,而您不能写入代码段。Windows(是的,这是平台)将新代码加载到代码段中,并在数据段上创建数据。但是,如果是这种情况,程序如何知道它必须将段切换到数据段?因为如果我理解正确的话,所有地址指令都指向您运行代码的段,除非您切换描述符。但我也读到,如此收集的平面内存模型允许您在一个段内运行代码和数据。但我只是在与汇编程序相关的情况下才读到这篇文章。那么,请问,Windows上的C编译代码是怎么回事?谢谢。 最佳答案 解释中segment有两种含义:一个80

php - 如何编写php函数

我想知道如何用c编写php函数(如strtoupper)。如果有任何教程,请放在这里谢谢 最佳答案 要用C编写一个可以从PHP使用的函数,您必须编写一个扩展。不幸的是,没有那么多可用的信息......不过,通过我的书签搜索,这里是我找到的链接:ExtensionWritingPartI:IntroductiontoPHPandZendExtensionWritingPartII:Parameters,Arrays,andZVALsExtensionWritingPartII:Parameters,Arrays,andZVALs[co