多次运行C ++程序

时间:2011-09-17 02:28:45

标签: unix

我有一个C ++程序,我需要多次运行它。 例如:- 运行./addTwoNumbers 50次。

解决这个问题的好方法是什么?

4 个答案:

答案 0 :(得分:10)

在POSIX shell中,

for i in {1..50} ; do ./addTwoNumbers ; done

答案 1 :(得分:1)

如果这是您正在编写的代码,请将您想要“运行”的次数作为参数:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[]) { 

    int numTimes = 1;   

    if (argc > 1)
    {
        numtimes = atoi(argv[1]);
    }

    for (int i = 0; i < numTimes; i++)
    {
        // Your code goes here
    }
}

(注意这不会对输入进行任何健全性检查,但它应该指向正确的方向)

答案 2 :(得分:1)

你问这个问题的方式表明你有一个完成的二进制文件。您希望像从命令行运行它一样运行它。对我来说,正斜杠是一个线索,你是一个类Unix操作系统的用户。嗯,那个,以及这篇文章被标记为“Unix”的事实,我在写下面之后就看到了。它应该都适用。

使用shell的方案可能是最简单的方案。

man bash告诉你如何编写shell脚本。实际上我们需要找出你正在使用的shell。从命令行键入:

echo $SHELL
The response I get is 
/bin/bash

意思是我正在运行bash。无论你得到什么,复制下来,你将需要它。

绝对最低的知识库是简单地创建一个带有任何标准文本编辑器且没有后缀的文件。称之为简单(例如)run50。

第一行是一个特殊行,告诉unix系统使用bash来运行命令:

#! /bin/bash
(or whatever you got from echo $SHELL).

现在,在文件的下一行中,键入从root到可执行文件的完整路径。 键入命令就像在命令行上键入命令一样。您也可以在那里为您的程序添加任何参数。保存文件。

你想运行程序,等待它完成,然后开始下一个副本吗?或者你想在不等待它完成的情况下以最快的速度启动它50倍?如果是前者,那么你完成了,如果是后者,那么用&amp;

结束这一行

告诉shell启动程序并继续。

现在复制该行50次。复制并粘贴,它有两次,选择全部,然后粘贴到最后,4次,再次为8,再次为16,再次为32,现在再复制18行,并粘贴到最后,你是完成。如果您碰巧复制了#! / bin / bash不用担心它,它是对shell的评论。

保存文件。

从命令行输入以下命令:

chmod +x ./filenameofmyshellcommand

您将使用刚刚创建的文件的名称替换filenameofmyshell命令。

最后运行命令:

./filenameofmyshellcommand

它应该运行程序15次。

如果您使用的是bash,而不是将该行重复50次,您可以编写一个循环:

for ((i=1;i<=50;i++)) do
echo "Invocation $i"
/complete/path/to/your/command
done

我已经包含一条消息,告诉您该命令在哪个运行。如果您正在计划该计划,我不会推荐像这样的“感觉良好”的消息。你可以用&amp;结束这一行。如果你想要启动命令并继续脚本。

此语法需要双括号,您必须支付语法。

for ((i=1;i<=50;i++)) do echo "invocation $i" & done

从命令行输入是一件有趣的事情,为了好玩。它将启动从命令行断开的50个回声,它们通常以不同于1到50的顺序出现。

在Unix中,有一个system()库调用,它将或多或少地从终端调用命令。您可以使用来自C ++或perl或大约其他许多程序的调用。但这是你能做的最简单的事情,你可以用这种方式计算你的程序。它是Unix中用于运行一个程序或一系列程序或通过运行一系列系统工具执行常见任务的常用方法。

如果你打算使用Unix,你应该知道如何编写一个简单的shell脚本。

答案 3 :(得分:-3)

int count=0;


int main()
{
beginning:    
//do whatever you need to do;
int count++;
if (count<=50);
{
goto beginning;
}
return 0;
}