尝试制作重复检查功能时遇到问题。
主要目标是将来自子进程的数据(基于返回true或false的check()函数结果)存储到父进程。我已经尝试了全局变量但是没有工作。
这是我的代码:
...
for(j=0; j<indIP; j++)
{
fflush(stdout);
if (!(fork()))
{
char* this_ip = strdup(ip[j]);
if(is_duplicate_check(this_ip,"file1"))
{
if(debugLevel >= 2) printf("Duplicate IP %s\n", this_ip);
}
else if( is_duplicate_check(this_ip,"file2"))
{
if(debugLevel >= 2) printf("Duplicate IP %s\n",this_ip);
}
else
{
if(debugLevel >= 2) printf("Checking IP [%d of %d] -> [%s]\n",current_combo,possible_combinations,ip[j]);
checkauth(this_ip);
}
exit(0);
}
else
{
numforks++;
current_combo += trys;
if (current_combo > possible_combinations)
{
break;
}
if (numforks >= maxf)
{
wait(NULL);
numforks--;
}
}
indInterface++;
if(indInterface>=countInterface) indInterface=0;
}
puts("Finalizing...");
while(numforks>0)
{
printf("Waiting for the child processes [%d] are finished ....\n", numforks);
wait(NULL);
numforks--;
}
puts("Script completed!");
return 0;
...
简而言之,程序从文本文件中读取ips并检查它们是否是某个GEO CODE位置。 is_duplicate_check
检查是否已经检查过ip,但它是通过将ips存储到file1
和file2
来工作的,当它到达100.000记录时,它会产生大量负载。
现在我想要的是在数组中存储来自子进程的ips并在调用check()
函数之前检查。
我已经尝试了
static int *glob_var;
glob_var = (int *) mmap(NULL, sizeof *glob_var, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
glob_var++;
printf("glob_var = [%d]\n",glob_var);
总是给我一些像(-1232557773525 ......),没用。
我该如何解决这个问题?
答案 0 :(得分:0)
fork复制内存。因此,当您存储变量时,它与父进程的内存不同。
如果你可以使用线程,你可以拥有共享全局变量的行为(因为线程共享内存)。
或者如果你必须分叉,你可以看看
How to use shared memory with Linux in C
用于共享内存使用或查看boost版本: