有没有办法在C中同时运行两个程序并记录输出

时间:2019-07-30 16:19:21

标签: c dictionary compilation runtime

我在C中有两个程序几乎相同(略有不同),并且在另一个C文件中有(键/值)字典

两个程序都完成了以下步骤

编译第一个程序

gcc file1.c dict.c

编译第二个程序

gcc file2.c dict.c

在文件内部。我调用了两个函数update(填充字典)和printDic(打印字典的内容)

//file1.c
int func(int w){
  update("w",w) 
  if ((w >= w) && ((w % w) == 0))
  {
    w= w*4
    update("w",w) 
    printDic();
  }
  else
  { 
    w=1;
    update("w",w) 
    printDic();
  }
  return 0; }

//file2.c
int func(int w){
  update("w",w) 
  if ((w >= 4) && ((w / w) == 0))
  {
    w = w/2;
    update("w",w)
    printDic();

  }
  else
  { 
    w=0;
    update("w",w)
    printDic();
  }
  return 0; }

并且两个文件都具有相同的主

//main
 int main(int argc, char *argv[]){
     func(10);
     func(5);
     func(2);
     func(0);
     func(180);

    return 0; }

因此,一旦w的值发生更改,update()就会在字典中填充w的值,然后将其打印出来。

是否可以同时使用字典运行这两个文件,以便比较输出,例如如果我在两个程序中都传递10,将最终得到不同的w值(存储在字典中)。

注意:我需要多次调用func,并且在同一文件中,我不想每次只调用一次就运行该程序。

该词典在处理一个文件时效果很好,在每次调用func时,w的值都会附加到txt文件中。

1 个答案:

答案 0 :(得分:1)

您可以使用线程来实现您的目标,例如:

#include "pthread.h"                                                                                    
#include <stdio.h>                                                                                      

#define bool int                                                                                        
#define true 1                                                                                          
#define false 0                                                                                         
#define thread pthread_t                                                                                
#define thread_fire pthread_create                                                                      
#define thread_wait pthread_exit                                                                        

int get_mul(int num, bool even)                                                                         
{                                                                                                       
    if (even)                                                                                           
        return (2 * num);                                                                               
    else                                                                                                
        return ((2 * num) + 1);                                                                         
}                                                                                                       

void* func_odd(void *arg)                                                                               
{                                                                                                       
    int num =  *((int *)arg);                                                                           
    printf("%s: [%d]\n", __func__, get_mul(num, false));                                                

    return NULL;                                                                                        
}                                                                                                       

void* func_even(void *arg)                                                                              
{                                                                                                       
    int num = *((int *)arg);                                                                            
    printf("%s: [%d]\n", __func__, get_mul(num, true));                                                 

    return NULL;                                                                                        
}                                                                                                       

void func(int num)                                                                                      
{                                                                                                       
    thread tid;                                                                                         
    thread_fire(&tid, NULL, func_odd,  (void *)&num);                                                   
    thread_fire(&tid, NULL, func_even, (void *)&num);                                                   
    thread_wait(NULL);                                                                                  
}                                                                                                       

int main(int argc, char **argv)                                                                         
{                                                                                                       
    int i, num = atoi(argv[1]);                                                                         

    func(num);                                                                                          

    return 0;                                                                                           
}

**compiling:**
gcc -g -c thread.c
gcc -o thread thread.o -lpthread

**Output:**
./thread 3 
func_odd: [7]
func_even: [6]

在上面的示例中,将func_odd()和func_even()替换为在两个不同文件中定义的两个函数(具有相同的名称)。

例如,您可以将“ func_odd”调用为“ func_file1”,将“ fund_even”调用为“ func_file2”。

多线程的力量!!!!