【问题标题】:C program for executing 'echo' on a target with no /bin directory用于在没有 /bin 目录的目标上执行“echo”的 C 程序
【发布时间】:2014-04-19 09:24:41
【问题描述】:

假设我从主机 Linux 系统为 ARM 交叉编译了这段代码:

#include <stdio.h>
#include <unistd.h>
#include <dirent.h>

int main (void) {

   return execl ("/bin/echo", "echo", NULL);

}

我得到了一个二进制 echoFromC

问题出在我运行此二进制文件的目标上,没有 /bin、/usr 等。所以它不会执行命令。

所以我希望最终的二进制文件应该包含执行“echo”所需的所有内容。它不应该寻找 /bin/echo (因为它不存在)。

我该怎么做?

其实我要实现:

bash> echo 240 > /sys/class/gpio/export
bash> echo out > /sys/class/gpio/gpio240/direction
bash> echo 1 > /sys/class/gpio/gpio240/value

在 c 程序中

【问题讨论】:

  • 为什么首先需要echo?为什么不在 C 代码中直接调用 printf()
  • 你需要在你的程序中实现echo而不是调用system("/bin/echo", ...
  • 一切都执行回显是什么意思?您需要找到可执行文件的路径还是只在标准输出上打印?
  • 请在底部查看我的更新
  • @perreal 我猜他想以某种方式在他的echoFromC 中包含可执行文件/bin/echo,但他正在进行交叉编译,除非他包含@987654329 的目标版本,否则这没有意义@.

标签: c linux


【解决方案1】:

您可以在 C 中实现那些 echo 函数,例如实现 echo 240 &gt; /sys/class/gpio/export,您可以执行类似的操作

FILE *fh;

fh = open("/sys/class/gpio/export", "w+");
if (fh == NULL) { /* fopen failed */ }

fwrite("240\n", 1, 4, fh);

fclose(fh);

【讨论】:

  • fwrite中的“\n”有什么具体要求吗?
  • @user2799508 echo 将在其输出的末尾添加一个换行符,除非您使用 -n 选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 2023-03-17
  • 1970-01-01
  • 2023-03-28
  • 2014-04-16
相关资源
最近更新 更多