在我与Nuttx,POSIX投诉RTOS的环境中,2个任务(进程)正在运行&两者都从控制台接收输入。当在控制台中输入“天气”时,根据优先级和其他因素,每个任务都会接收输入字符的子集。
如何在两个任务中获得“天气”而不考虑优先级等。?目前,每个任务等待选择,然后读取stdin。
每个进程是否有stdin流/缓冲区?
答案 0 :(得分:1)
当然在一个角色" w"由一个任务接收,因为它已经被消耗并且在传入的数据流中不再可用,所以它不能被另一个任务接收。
你需要的是在两个任务中发球的道德等同物。这个T恤任务将:
int input; dup2(0, input); close(0);
int task1_fd[2]; pipe(task1_fd); dup2(task1_fd[0], 0); if (task1_fd[0] != 0) close(task1_fd[0]) task_create(...)
int task2_fd[2]; ... similar ...
nread = read(input, buf, buflen);
nwritten = write(task1_fd1[1], buf, nread); ... nwritten = write(task1_fd2[1], buf, nread);
通过这种方式,从控制台读取的每个字符都可以回显到这两个任务。
上面的代码示例使用NuttX工具来完成这项工作。重定向可以在像Linux这样可以支持fork()的完整POSIX系统上更加干净地完成。
我们这样做:保存标准输入文件描述符,重定向I / O和生成。
在完整的POSIX系统中,您可以执行:fork,redirect I / O和exec。
Nuttx实际上支持fork(well,vfork)和exec函数。但这些很少用于深度嵌入式系统。