【问题标题】:is it safe to read the pipe when the other side is writing to it?当另一方正在写入管道时读取管道是否安全?
【发布时间】:2010-08-23 15:33:10
【问题描述】:
      fSuccess = ReadFile( 
         hPipe,    // pipe handle 
         chBuf,    // buffer to receive reply 
         BUFSIZE*sizeof(TCHAR),  // size of buffer 
         &cbRead,  // number of bytes read 
         NULL);    // not overlapped 

如果不安全,如何确保在windows中读取管道时对方不写?

【问题讨论】:

  • 读/写 TCHARS 肯定不安全。因为另一端有不同的进程,它可能会在打开或关闭 unicode 的情况下进行编译。

标签: c++ winapi communication pipe


【解决方案1】:

是的,这是对管道的完全合法操作。管道的一端可以读取和写入管道,而不管另一端发生了什么。

【讨论】:

  • 如果你在写管道的时候对方已经退出了怎么办?
  • 如果对方从管道读取速度太慢,而你正在写入管道时缓冲区已满怎么办?
【解决方案2】:

它非常安全——管道自动处理缓冲区上所有必要的同步等。如果您在另一个进程关闭与管道的连接时尝试写入/读取管道(通过关闭管道显式关闭,或通过退出进程隐式退出),您将从GetLastError 获得ERROR_BROKEN_PIPE。如果您使用匿名管道,父进程通常会查找此管道以检测子进程何时退出,因此不会有更多数据需要处理。

【讨论】:

  • 如果对方从管道读取速度太慢,而你正在写入管道时缓冲区已满怎么办?
  • @wamp:如果内存服务,内核将扩展缓冲区——直到一个点。如果缓冲区已满并且已经达到最大大小,我认为尝试写入只是阻塞,尽管我不记得了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多