【问题标题】:Execute programs out of C从 C 中执行程序
【发布时间】:2018-03-05 13:07:14
【问题描述】:

我正在尝试在 eInk 显示器上显示一些值(通过 SPI)。我已经编写了软件来初始化显示并显示作为命令行参数传递的值。问题是,由于 eInk 技术,显示需要几秒钟才能完全实现,所以显示程序也在这段时间内运行。

另一个(“Master”-)程序收集值并做其他事情。它有一个主循环,必须以至少 10 次/秒的速度循环。 所以我想从主循环中启动显示程序并立即继续循环。

当使用system()execl()时,主程序要么等待显示程序完成,要么退出新进程。

有没有办法只从其他程序中启动其他程序,而它们之间没有任何进一步的联系?它应该在 Linux 上运行。 可以 fork() 解决吗?

【问题讨论】:

  • 你可以试试system("your command")pthreads
  • fork() + exec() 是一种方式。 system("your command &"); 是另一个。
  • 您是否关心程序是否无法启动?
  • "t 有一个主循环,它必须至少循环通过 10x/秒" 那是什么样的实时要求?如果您的主循环执行时间超过 100 毫秒,那么您将遇到一些真正严重的问题。现在你应该在这里做的是编写一个多线程程序。

标签: c linux


【解决方案1】:

快速而肮脏的方式:使用带有背景后缀的system (&)

char cmd[200];
sprintf("%190s &","your_command");
system(cmd);

请注意,它不可移植,因为它依赖于底层 shell。对于 Windows,你会这样做:

sprintf("start %190s","your_command");

快速而肮脏的解决方案的主要缺点是它是“一劳永逸”。如果程序无法正常执行,只要 shell 可以启动进程,您仍然会得到 0 返回码。

可移植方法(也允许处理进程的返回代码)稍微复杂一些,涉及从线程或分叉的可执行文件运行系统调用。快速而肮脏的解决方案在后台执行 fork + exec 的 shell 命令。

【讨论】:

    猜你喜欢
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 2011-06-24
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多