【问题标题】:Give arguments to a program using a C program [closed]使用 C 程序为程序提供参数 [关闭]
【发布时间】:2012-03-19 14:14:27
【问题描述】:

我是 GNU Linux 的初学者。

我只是想在启动时用我自己的代码替换 init 程序,我在程序结束时调用原始 init。

但问题是:我无法在此处提供参数。我在我的程序中将 init 称为system("/sbin/init")。怎么给参数?

【问题讨论】:

  • 如果你是“GNU Linux 的初学者”,也许替换init 不应该是第一件事……无论如何,你可能不想要system,而是exec 的一个版本。
  • 您至少应该以简化的方式发布您的代码。
  • @0A0D 不,您的链接是关于系统调用的问题。这与运行程序不同。
  • @blueshift:谁在谈论系统调用?请参阅链接的问题。事实上,看看 unwind 的答案.. 基本上是链接问题答案的副本。

标签: c


【解决方案1】:

如果您是初学者,为什么要替换系统的根启动过程?这听起来像是一件相当危险的事情。有点像在处理步枪的第一周做apple shot 之类的。

也就是说,假设您的方法有效,您需要格式化一个字符串以包含所需的参数,然后将该字符串传递给system()。查看snprintF() 了解如何轻松构建字符串。

【讨论】:

  • 感谢您的回复。我正在使用 init 只是因为我想更接近内核并了解它。我的程序如下所示, int main() { system("/sbin/clear.sh"); //清除屏幕的简单shell脚本 system("/sbin/name"); // 我希望在 init system("/sbin/sleep.sh"); 之前执行的程序系统(“/s​​bin/clear.sh”);系统(“/s​​bin/init 2”); //我用参数 2 调用 init }
【解决方案2】:

由于 system(3) 很像调用子程序,您应该使用fork() 创建一个子进程,然后调用execvp()

Pipe, Fork, Exec and Related Topics

【讨论】:

    【解决方案3】:

    像这样:

    system("/bin/echo wibble wobble");
    

    但您几乎可以肯定不想这样做。当您尝试它并且您的系统不再启动时,下次编辑 inittab 以便 init 运行您的程序,而不是相反。

    【讨论】:

    • 感谢您的回复。但我不关心打印但执行它。如果我写 system ("/sbin/init 1") 那么它的 init 应该使用参数 1 运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2020-05-08
    • 2013-10-08
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    相关资源
    最近更新 更多