1

我正在寻找一个优先级列表,其中包含来自 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 */

多谢你们!:)

4

1 回答 1

1

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

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

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

于 2013-07-26T11:41:07.737 回答