假设我有一个在 shell 中运行的回显用户输入的进程。那么如何从另一个终端向/从该外壳传递数据?是否可以不使用中间文件?
例如,如果我有代码
fgets(string, LEN, stdin);
printf("%s", string);
Run Code Online (Sandbox Code Playgroud)
那么,是否可以将数据传递给stdin,并stdout通过不同的外壳从中获取数据?
我不确定我是否明白你的意思,但是。
在单个 shell 会话(终端)中,您将使用管道将数据从一个命令传递到另一个命令,如下所示:
$ ls -l | grep something
Run Code Online (Sandbox Code Playgroud)
如果需要在两个不同的 shell 之间执行此操作,可以使用命名管道:
tty1$ mkfifo /tmp/mypipe
tty1$ ls -l > /tmp/mypipe
tty2$ grep something < /tmp/mypipe
Run Code Online (Sandbox Code Playgroud)
使用mktemp创建一个目录来放置命名管道会更安全:
tty1$ dir=$(mktemp -d)
tty1$ mkfifo "$dir/mypipe"
tty1$ ls -l > "$dir/mypipe"
tty1$ rm -r "$dir"
Run Code Online (Sandbox Code Playgroud)
虽然这需要将路径复制到另一个窗口,可能需要手动。
当然,命名管道有点像中间文件,因为它需要一个路径名。但它的作用更像是一个管道,因为数据不会被写入永久存储,如果写入器很慢,读取器会等待写入器,而不是可能遇到过早的文件结束。
(您通常会使用ls -l *something*代替ls | grep,但它可以用作示例。)
| 归档时间: |
|
| 查看次数: |
604 次 |
| 最近记录: |