|
发表于 2009-11-3 13:12:25
|
显示全部楼层
Post by mrstupid;2042003
谢谢remote fish, 现在工作起来了, 我确实忘了要返回true.
有几个不明白的地方还望指点:
1. stdin应该是只读文件, 为什么G_IO_OUT会一直有效.
2. 在读取输入的时候, stdin的输入不是缓冲的么, 我在函数中使用 while (0<(len=read(fp, buffer, 1023)))
的本意是读取用户当前所有输入, 但是这个函数好像会阻塞等待用户输入. 这样的话, 事件循环也就阻塞住了. 如何避免这种情况呢.
1 的问题, 抱歉我也不知道系统内部是如何处理的.
2 的问题, 如果楼主打算使用非 channel 的接口来读取数据的话, 建议先把 channel 设置为非缓冲的 (不过对于 stdin 是否能正确完成这样的操作我不太确定), 否则 channel 内部的缓冲会导致很多问题. 或者, 仅使用 channel 的相关接口来读取数据. 无论使用哪一种方法, 也不应该在 channel 中进行楼主这样的 while() 循环, 而应该只读取一次后就直接 return, 如果还有数据, 那么 watch callback 会继续被调用, 直到数据读完. 如果一定要在一次 callback 中读取尽量多的数据, 那么至少每一次 read() 前用 poll() 或者 select() 判断一下是否还有数据. 但其实也许楼主会愿意试一试 g_io_channel_read_to_end() 函数. |
|