2013-07-26 52 views
1

我正在创建一个优先级列表,在Unix环境中由分叉进程填充PID。我找到了下面的代码段,但我不明白rand和srand(getpid())正在完成什么。如何通过使用随机数字创建“优先级列表”?什么是srand(getpid())和rand()在下面做什么?

我知道rand() % (100 - 1) +1;为您提供了一个随机数,但为什么代码的作者在减去它后会加1?

for(B = 0; B < noToCreate; B++)  
    { 
     pid = fork(); 

     if(pid == -1) 
     { 
      perror("Error forking"); 
      exit(1); 
     } 
     else if(pid > 0) 
     { 
      wait(0); 
     } 
     else 
     { 
      srand(getpid()); 

      while(x == 0) 
      { 
       if(*randNum == 101) 
       { 
        *randNum = rand() % (100 - 1) + 1; 
        *pidNum = getpid(); 

        printf("priority: %d Process ID: %d \n", *randNum, *pidNum); 

        x = 1; 
       } 
       else 
       { 
        *randNum++; 
        *pidNum++; 
       } 
      } 
      exit(0); 
     } 
    } /* Closes main for loop */ 

谢谢你们! :)

+0

不清楚你的问题是什么。你的头衔声称你在问'srand'和'rand',如果是的话,你应该首先查看'man'页面。然后问题文本看起来更像是想知道表达式'x%(100 - 1)+ 1'的优先规则。 –

回答

1

srand函数种子由rand使用的随机数发生器。这是为了确保每次运行程序时都不会得到相同的数字序列。

正常使用是使用time返回的当前时间,但是任何“看似”随机数都可以。并且不可以,您不能使用rand来创建种子,因为如果没有先前种子,在程序中调用的第一个rand将始终返回相同的数字。

至于rand() % (100 - 1) +1部分,它以得到一个随机数1到100之间。它是由第一完成除以99(100 - 1)随机数,并使用剩余部分,其是在0和99之间,然后加1以获得介于1和100之间的值。

+3

1到100但不等于100的范围实际上是[1,99]。 – phoxis

+0

谢谢!我了解种子以及rand()%(100-1)+ 1如何工作/它现在的功能! :) 我认为一个优先级列表将不得不被排序,但不会printf语句只是打印出随机数字,其相应的PID值,以完全未分类的方式? 此外,为什么当PID由父进程设置并且'共享'到子进程时,他种下getpid()? 你们已经帮助加载了!谢谢! :d – viKK