>ioctlでTIO???を使うってどこかで見た記憶があるのですが。
これは勘違いだったような気がしてきました。

やりたいことは下のプログラムのこの部分で、
>// 子プロセス (shell) 出力 → 親プロセス標準出力 に転送
>ssize_t len = read(ufds[1].fd, buf, sizeof(buf));
子プロセスからの出力を全部読み取ったかを確認することです。

ioctlにはこだわりません。何か方法を教えてください。

http://www.hakusan.tsg.ne.jp/tjkawa/pdiary/200306.jsp
while (true) {
    ufds[0].fd = 0; ufds[1].fd = master;
    ufds[0].events = POLLIN; ufds[1].events = POLLIN;
    ufds[0].revents = 0; ufds[0].revents = 0;
    int r = poll(&ufds[0], 2, -1);
    if (r > 0) {
        if (ufds[0].revents & POLLIN) {
        // 親プロセス標準入力 → 子プロセス (shell) に転送
        ssize_t len = read(ufds[0].fd, buf, sizeof(buf));
        if (len > 0) write(ufds[1].fd, buf, len);
        } else if (ufds[0].revents) break;
        if (ufds[1].revents & POLLIN) {
        // 子プロセス (shell) 出力 → 親プロセス標準出力 に転送
        ssize_t len = read(ufds[1].fd, buf, sizeof(buf));
        if (len > 0) write(1, buf, len);
        } else if (ufds[1].revents) break;
以下略