srand(getpid()) 和 rand() 在下面做啥?

Posted

技术标签:

【中文标题】srand(getpid()) 和 rand() 在下面做啥?【英文标题】:What is srand(getpid()) and rand() doing below?srand(getpid()) 和 rand() 在下面做什么? 【发布时间】:2013-07-26 11:32:33 【问题描述】:

我希望在 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 */

谢谢各位! :)

【问题讨论】:

不清楚你的问题是什么。您的标题声称您在询问srandrand,如果是这样,您应该首先查找man 页面。然后问题文本看起来更像您想了解表达式x % (100 - 1) + 1的优先规则。 【参考方案1】:

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

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

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

【讨论】:

1 到 100 但不等于 100 实际上范围是 [1,99]。 谢谢!我了解播种以及 rand() % (100-1) + 1 的工作原理/它现在的作用! :) 我认为必须对优先级列表进行排序,但 printf 语句不会以完全未排序的方式简单地打印出随机数及其相应的 PID 值吗?此外,当 PID 由父进程设置并“共享”给子进程时,他为什么要播种 getpid() ?你们已经帮助加载了!谢谢! :D

以上是关于srand(getpid()) 和 rand() 在下面做啥?的主要内容,如果未能解决你的问题,请参考以下文章

rand和srand函数的用法

rand和srand函数的用法

RAND函数和SRAND函数

rand()和srand()的用法

19rand()和srand()函数

随机函数rand()和srand()