【问题标题】:Returning string to Bash Script form C program that needs to print at screen将字符串返回到需要在屏幕上打印的 C 程序的 Bash 脚本
【发布时间】:2018-11-27 10:18:19
【问题描述】:

我正在尝试编写一个 bash 脚本以在 Ubuntu 系统上运行。

这个想法是脚本需要初始化一个 C 程序。 C 代码创建一个文件夹并在其中存储来自 ADC 的数据,同时输出采集次数。

a 想要做的是将代码中创建的文件夹的名称返回给 bash 脚本,以便能够复制它。问题是,据我所知,代码只能返回一个 8 位 INT,而不是整个字符串。 同样使用 fprint 也不是一个解决方案,因为我需要在屏幕上打印获取的数量,而不仅仅是文件夹的名称。

任何我不知道的替代解决方案?

【问题讨论】:

  • 从输出中解析出数字。或者,如果其他输出不打算进一步处理,则使其他输出转到stderr 而不是stdout。
  • 在消息中添加一些元信息:adc_output:value、directory:value,除非您希望以某种格式打印 adc 信息并且无法更改它。

标签: c string bash ubuntu


【解决方案1】:

(坏)从 C 程序“返回”字符串的方法

如你所说,一个程序只能返回一个返回码。顾名思义,返回码是为了传达程序的成功执行,而不是返回数据。

在您的情况下,您可以使用几种方法返回文件夹名称:

这两个选项都不好,因为你也需要知道结果会写到哪里(文件路径的环境变量名)

你应该做什么

解决的方法是将问题翻转过来,并将您希望 C 程序写入的文件夹作为 an argument 传递。

【讨论】:

  • 可能文件夹的名称取决于程序接收到的数据。
  • @Groo 确实如此,但是从外部输入(用户/传感器/...)生成文件名无论如何都是不好的做法(参见 this windows specific answer 示例)
  • 但是 OP 试图返回的确切数据与恕我直言的问题不太相关。它可以是任何一组值(number_of_acquisitions, list_of_sensor_names, peak_value),由程序确定。
【解决方案2】:

程序可以将目录名写入文件描述符3,然后通过shell捕获它

program 3>dir.txt 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多