简单的bash-c通信



我正在尝试构建一个将响应简单C程序的脚本。我猜这些脚本需要逐行读取并解析文本,直到找到问题为止。然后,它必须回复相同的stdout。脚本在无限循环中读取,我在命令行

上启动它
./script.sh &

为了使其在后台运行。然后,在同一终端中,我启动在命令行上输出并在SCANF等待的C程序。我的问题是,看来这两个过程正在与其他Stdout进行交互,因为它们无法"看到"彼此。显然我误解了一些东西...有什么帮助吗?

#!/bin/bash
for (( ; ; )) do
    while read line; do
        if [ "$line" == ">" ] then
        echo "yes"
        fi
    done
done    

使用期望如何?期望是一个Unix工具,可以编程回复交互式应用程序,对于解决您的问题非常有用。当然,您可以在bash脚本中使用它。

您问题的答案看起来与:

#!/bin/bash
expect << EOF
  spawn simple_c_application
  expect ">"
  send "yesr"
  expect eof
EOF

脚本将产生您的应用程序,检查您的输出,然后回复当输出行包含> 时。您还可以在期望模式中使用锚点:字符^匹配线路的开头,而 $结束。因此,只有当行是>

时,^>$才匹配

您只需要安装您的软件包管理器的期望,然后一如既往地使用bash脚本。

使用mkfifo创建一个套接字文件,从此套接字文件而不是stdin读取脚本。从您的C程序中,使用open打开套接字,只需写入此而不是stdout。

示例:

在终端类型中以创建套接字文件。

user~$ mkfifo mysocket

将您的脚本更改为:

while :
do
    here=$(<mysocket)
    if [ "$here" == ">" ] then
        echo "yes"
    fi
done

和您的C文件

char* test = ">n";
int mysocket = open("/home/user/mysocket","w");
int byteswrite = write(mysocket,(void*)test,2);

首先运行脚本,然后在您的程序之后

相关内容

  • 没有找到相关文章

最新更新