管道返回0,但read_fd设置为0

时间:2020-10-05 10:22:02

标签: c++ linux

我有一个程序在Linux中使用holidays[currentFrame]= BitmapFactory.decodeResource(getResources(), R.drawable.porim1); result = Bitmap.createBitmap( holidays[currentFrame].getWidth(), holidays[currentFrame].getHeight(), Bitmap.Config.ARGB_8888); canvas = new Canvas(result); paint = new Paint(); canvas.drawBitmap(holidays[currentFrame],0, 0, paint); holidayImage.setImageBitmap(result);创建可以与pipe结合使用的事件。该事件有时会被删除,然后重新创建。在这些调用之一epoll上返回0(成功),但是在filedescriptors的数组中,将读fd(索引0)设置为0,并在写入写fd(索引1)时得到{ 1}}。我什么都没找到,即使创建一个小型测试程序也无法重现此问题。

这是创建管道的方式:

pipe

是在任何地方记录了这种行为,还是有人知道是什么原因造成的?

1 个答案:

答案 0 :(得分:0)

假设:

  • 在实际调用pipe()之前,您显式或隐式关闭了标准输入(close(0); fclose(stdin);
  • 结果,描述符0被视为“免费”,并用作fd [0],即已创建管道的读取端
  • 然后您再次显式或隐式执行close(0);
  • 因此,您的管道具有封闭的读取面
  • 最后,当您尝试写入fd [1]时,如果读取侧关闭,则会得到预期的SIGPIPE。

如果此假设正确,则需要了解谁定期关闭(至少两次)当前进程的描述符0

相关问题