2013-07-26 91 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