首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PseudoTerminal -不是从stdin读取的

PseudoTerminal -不是从stdin读取的
EN

Stack Overflow用户
提问于 2017-01-26 19:25:45
回答 1查看 64关注 0票数 0

我正在创建一个类,在这个类中,我可以创建多个伪终端线程,为了与每个线程对话,我必须创建多个文件/ fifo来与每个伪终端从站对话,因为对stdin的任务会使任何创建的伪终端侦听,问题是当使用fifo作为输入时,它不能工作。

这是代码

代码语言:javascript
复制
void * Terminal::tTerminal(void * pvParameters)
{
    Terminal (*self) = reinterpret_cast<Terminal*>(pvParameters);
    fd_set inFds;
    //dup2(self->in, STDIN_FILENO);
    for (;;)
    {
        FD_ZERO(&inFds);
        FD_SET(self->in, &inFds);
        FD_SET(self->masterFd, &inFds);
        if (select(self->masterFd + 1, &inFds, &inFds, NULL, NULL) == -1)
        {
            printf("select");
        }


        if (FD_ISSET(self->in, &inFds))
        {
            self->numRead = read(self->in, self->buf, BUF_SIZE);
            if (self->numRead <= 0)
                exit(EXIT_SUCCESS);

            if (write(self->masterFd, self->buf, self->numRead) != self->numRead)
                printf("partial/failed write (masterFd)");
        }
        else
        {
            printf("partial/failed write (masterFd)");
            fflush(stdout);
        }

        if (FD_ISSET(self->masterFd, &inFds))
        {
            self->numRead = read(self->masterFd, self->buf, BUF_SIZE);
            if (self->numRead <= 0)
                exit(EXIT_SUCCESS);

            if (write(self->out, self->buf, self->numRead) != self->numRead)
                printf("partial/failed write (STDOUT_FILENO)");
        }
        else
        {
            printf("partial/failed write (STDOUT_FILENO)");
            fflush(stdout);
        }
}

要进一步注意,Fifos是正确创建的,文件描述符不是0,主程序和从程序正在运行,唯一的问题是:

代码语言:javascript
复制
FD_ISSET(self->in, &inFds)

这意味着它没有被设定,

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-26 22:30:42

您应该确保select()的第一个参数是所有可能的文件压缩器中的最高值加上一个,因此:

代码语言:javascript
复制
select(std::max(self->masterFd, self->in) + 1, &inFds, &inFds, NULL, NULL)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41881363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档