【问题标题】:How to call a function on a C program by a cron job scheduler to call the function everyday in ubuntu?如何通过cron作业调度程序调用C程序上的函数以每天在ubuntu中调用该函数?
【发布时间】:2021-09-13 11:40:15
【问题描述】:

我听说我们可以在 cron 作业中调用 C 程序的 .out 文件,但我可以在需要每天执行的 cron 作业中调用程序内的函数吗? 我知道每天 25 分钟调用一次 c 程序是, 25 * * * * /home/users/Desktop/abc.out

但是如何每天在该程序上调用特定函数? 请帮助我,因为我是 cron 作业调度的新手。提前致谢。

【问题讨论】:

  • 您需要编写程序,以便通过运行带有所需参数的程序来调用该函数。
  • 使用 cron,您可以在定义的时间执行命令行。如果您知道如何从命令行调用您的函数,那将是您问题的答案(也许除了一些细节来正确设置执行环境)。如果您的 C 程序不允许您单独执行该特定功能,则您必须开发一个新程序来执行该功能(或将该功能添加到现有程序中)。
  • @kaylum 是的,但我应该在特定的时间间隔内调用特定的函数,即每天 25 分钟后。所以我选择了 cron 作业调度。我不知道按预定方式调用特定函数
  • 请提供更多信息,即:函数及其参数,可能是您“听说”的地方
  • 这是两个独立的问题。 1.编写一个程序,在传递特定参数时调用该函数。 2. 使用 crontab 中的这些参数运行程序。

标签: c linux ubuntu cron


【解决方案1】:

Cron 是按计划执行程序的服务,而不是调用程序功能的服务。因此,要调用程序的函数,您需要编写一个调用该函数的程序。如果您阅读 crontab(5) 手册页,您将了解如何定期调用程序。 C 程序总是首先调用它的main() 函数,因此您可以编写一个调用它的程序,但是您需要使用具有不同main() 例程的不同程序,每个例程都调用您要调用的实际函数。这将只加载一次共享对象,您可以调用一个小程序来运行实际函数,而无需每次都重新加载所有函数。另一种方法是制作一个普通库并将每个函数编写在不同的(隔离的)编译单元中,当您链接时,链接器将仅选择您正在静态链接的模块,并且每个程序将只有您想要执行的函数。

如果你设计和构建一个共享库,那么你可以制作不同的小程序,每个都有不同的main() 例程,并且它们可以与你想要执行的不同函数之一的每个主调用动态链接,但我认为这超出了在不完全了解您正在处理的确切问题是什么的情况下解释如何执行此操作的范围。

【讨论】:

    【解决方案2】:

    在使用 C 等语言编写的传统编译程序的世界中,模块化的基本单元——领域的硬币——是 函数。您可以做的任何有趣的事情都需要调用一个函数来完成。

    另一方面,在 Unix 和 Linux 的世界中,模块化的基本单元是 程序。您可以做的任何有趣的事情都需要调用一个程序来完成。

    当然,这两个世界是重叠的,但这意味着有很多程序实际上只是围绕有趣函数的薄的、命令行可调用的包装器。一个很好的例子是stat:有一个库函数(严格来说也是一个系统调用)stat(2),然后还有一个命令行可调用程序stat(1)

    所以是的,如果你有一个有趣的任务,你想用完 cron,如果你目前只有一个函数来执行这个任务,你几乎肯定会写一个小程序 - 一个“瘦包装器” - 至少包含一个 main() 的定义,其中包含对您的函数的调用。如果您想从命令行执行该任务(调用该函数),这与您需要做的事情完全相同。

    似乎没有必要编写这些瘦包装程序。如果有某种通用解决方案来解决从命令行调用函数的问题,那可能会很好。而且,事实上,至少理论上是存在的。一种可能性是C 解释器。例如,使用名为 ci 的 C 解释器,我可能会这样写:

    ci -c 'printf("%x\n", 42);'
    

    这是一个命令行调用,足以调用解释器,要求它以某种方式调用 C 函数printf,而无需编写专用程序来执行此操作。这里唯一的问题是ci 不是标准程序;这是我自己写的。 (当然,在现实世界中,有一个 ci 命令,它是 RCS 的一部分,它的作用完全不同。)

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 2013-12-19
      • 2021-09-18
      • 2010-11-19
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 1970-01-01
      相关资源
      最近更新 更多