C语言getstdhandle用法,c – 如何正确启动进程并转发stdin / stdout / stderr?

为了等待多个文件或管道上的I / O,您需要对每个文件发出异步I / O请求,然后等待所述请求的完成.沿着这些方向的东西(未经测试):

HANDLE file1, file2; // initialized somehow

HANDLE events[2];

events[0] = CreateEvent(NULL, TRUE, FALSE, NULL);

events[1] = CreateEvent(NULL, TRUE, FALSE, NULL);

OVERLAPPED overlapped1 = {0};

overlapped1.hEvent = events[0];

OVERLAPPED overlapped2 = {0};

overlapped2.hEvent = events[1];

ReadFile(file1, buffer1, size1, NULL, &overlapped1);

ReadFile(file2, buffer2, size2, NULL, &overlapped2);

WaitForMultipleObjects(2, events, FALSE, INFINITE);

需要在循环中调用ReadFile和WaitForMultipleObjects.您检查WaitForMultipleObjects的返回值以了解哪个操作已完成,使用GetOverlappedResult来发现该操作的结果(是否成功,如果是,它检索了多少字节),处理数据,再次调用该句柄的ReadFile你想从中读更多,然后回到等待.这有点类似于Linux中由select驱动的非阻塞I / O循环.

更高级的技术是I/O completion ports.这允许一个线程池处理大量的异步I / O.常用于Web服务器等,可能对你的情况有些过分.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值