我希望创建一个优先级列表,其中包含来自 Unix 环境中的 fork 进程的 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 */
谢谢大家! :)
最佳答案
srand
函数种子 rand
使用的随机数生成器.这是为了确保您不会在每次运行程序时都得到相同的数字序列。
正常使用是使用 time
返回的当前时间,但任何“看似”随机数都可以。不,您不能使用 rand
来创建种子,因为如果没有先前的种子,程序中的第一个 rand
调用将始终返回相同的数字。
至于rand() % (100 - 1) +1
部分,就是得到一个1到100之间的随机数。先除以随机数 99 (100 - 1) 并使用 0 到 99 之间的余数,然后加 1 得到 1 到 100 之间的值。
关于c - 下面的 srand(getpid()) 和 rand() 在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17880233/