什么是将串口设备的i / o重定向到linux中的标准i / o的api

时间:2017-08-17 06:31:19

标签: c linux vxworks

我正在尝试将Vxworks应用程序移植到Linux。为了将其中一个串行设备的i / o重定向到标准i / o,它们使用ioTaskStdSet();在vxworks中。 但我无法像在Linux中那样在linux中找到api。只有在我的应用程序中无效的linux中才能使用复制设备。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

正如@Ignacio提到的那样,dup2完全用于此目的。例如,该程序将stdout重定向到" echo"文件:

#include <fcntl.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    int fd = open("echo", O_RDWR | O_CREAT, 00644);
    if(fd == -1)
        return 1;

    if(dup2(fd, 1) == -1)
        return 1;
    close(fd);

    system("echo Hi!");
    return 0;
}

答案 1 :(得分:0)

int main()
{
    for(i=0;i<4;i++)
    {
        sprintf(dev_name,"tsports%d",i);
        fd[i] = open(dev,O_RDWR | O_SYNC);
        pthread_create(tid[i],NULL,&thread_fun,(void *)fd[i]);
    }
    pthread_exit(NULL);
}
int thread_fun(void *chan)
{
     int new_fd,old_fd;
     old_fd = (int)chan;

     new_fd = dup2(old_fd,0);
     new_fd = dup2(old_fd,1);
     ts_fd = old_fd;
     tn();
     pthread_exit(NULL);
}
void tn()
{
     printf("hello on terminal");
     while(1)
     {
          read(ts_fd,&ch,1);
          /* command line */
          ........
          ........
          ........

          /* starts telnet client application on terminal port*/         
          .......
       ......
           ......
          .......
          sleep(1);
     }
}

 In the above code while taking input from terminal 1 it is again redirecting stdi/o to terminal 2 in second thread.

所以我想要线程特定的stdi / o,即使在每个终端上重定向。这在Vxworks中可用作IoTaskStdSet API。  是否可以在linux中实现。