【问题标题】:C running same program twice in LINUX [closed]C在LINUX中两次运行相同的程序[关闭]
【发布时间】:2015-11-21 19:42:49
【问题描述】:

我想知道是否可以两次运行同一个程序,并且每次它都执行不同的操作。例如,我有两个程序,一个用 fifo 管道写入,一个用它读取。所以有programA.c和programB.c(简单的程序,只是发送一些整数)。 但我想这样运行它:

./program & sleep 1; ./program

所以一个程序会有两种操作模式。

谢谢。

【问题讨论】:

  • 是的,您通常会编写程序以便它接受不同的参数。例如,./program --mode1 && sleep 1 && ./program --mode2。当然,program 也可以自己调用sleep()
  • 在什么基础上它会做一些不同的事情?它需要一些东西来告诉它它必须有不同的行为,比如不同的参数,或者它检查的不同外部条件。另请注意,您不能“运行” C 文件。它必须被编译。
  • 我对 .c 的看法很糟糕,就像我说的现在我必须参加计划,我正在尝试加入他们。我只是想知道我可以在代码中做什么,这样当我运行第二个代码时,其他一些代码就会运行
  • 您可以在program 中拥有许多函数,并从伪随机数生成器中选择它们。您可以检查进程列表并对program 的第二个、第三个等实例有不同的响应。你想让它做什么?
  • 我用system()函数解决了问题

标签: c linux pipe


【解决方案1】:

是的,这是可能的。您可以根据需要多次运行程序。但是,您可能需要确保同一程序的两个实例不会争用相同的资源;例如,如果它们都写入同一个文件,可能会出现意想不到的结果。

如果您希望同一个程序做两件不同的事情(一件写入 fifo,一件从它读取),您必须确保程序可以确定要采取的操作。一种方法是解析命令行参数(例如,调用一个为myprog --read,另一个调用为myprog --write。另一种方法是程序首先检查fifo是否存在;如果没有存在,它可以创建fifo并写入它,如果它确实存在,它可以从中读取。

【讨论】:

    【解决方案2】:

    编写程序以接受命令行参数,如 sed 或 awk。 下面是一个 C 语言的简单示例:

    #include <stdio.h>
    
    int main( int argc, char *argv[] )  {
    
        if( argc == 1 ) printf("You passed in zero arguments and your program is named %s\n", argv[0]);
    
        if( argc > 1 ){
            int x;
            for(x = 1; x < argc; x++)
                printf("Argument %d is named %s\n",x, argv[x]); //print multiple arguments
        }
    
    return 0;
    }
    

    如果你不带参数编译并运行这个程序,它会告诉你你没有传入任何参数;否则,您可以传入任意数量的命令行参数,它会为您打印出来。

    关键是这个程序会根据传入的参数做不同的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 2011-11-12
      • 2022-01-16
      • 1970-01-01
      • 2012-05-02
      相关资源
      最近更新 更多