什么是srand(getpid())和rand()在下面做什么?

时间:2013-07-26 11:32:33

标签: c random ipc fork srand

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

我知道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 */

谢谢你们! :)

1 个答案:

答案 0 :(得分:1)

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

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

对于rand() % (100 - 1) +1部分,它是获得1到100之间的随机数。它是由首先将随机数除以99(100 - 1)并使用余数介于0和99之间,然后加1以获得介于1和100之间的值。