C 下面srand(getpid()和rand()在做什么?
我希望在Unix环境中创建一个优先级列表,其中包含来自分叉进程的PID。我找到了下面的代码部分,但我不明白rand和srand(getpid())实现了什么。如何使用随机数创建“优先级列表” 我知道,C 下面srand(getpid()和rand()在做什么?,c,random,ipc,fork,srand,C,Random,Ipc,Fork,Srand,我希望在Unix环境中创建一个优先级列表,其中包含来自分叉进程的PID。我找到了下面的代码部分,但我不明白rand和srand(getpid())实现了什么。如何使用随机数创建“优先级列表” 我知道,rand()%(100-1)+1会给你一个随机数,但是为什么代码的作者在减去1后还要费心加1呢 for(B = 0; B < noToCreate; B++) { pid = fork(); if(pid == -1) {
rand()%(100-1)+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 */
(B=0;B<0;B++)的
{
pid=fork();
如果(pid==-1)
{
perror(“错误分叉”);
出口(1);
}
否则,如果(pid>0)
{
等待(0);
}
其他的
{
srand(getpid());
而(x==0)
{
如果(*randNum==101)
{
*randNum=rand()%(100-1)+1;
*pidNum=getpid();
printf(“优先级:%d进程ID:%d\n”,*randNum,*pidNum);
x=1;
}
其他的
{
*randNum++;
*pidNum++;
}
}
出口(0);
}
}/*关闭主回路*/
谢谢大家!:) 该函数为所使用的随机数生成器种子。这是为了确保每次运行程序时不会得到相同的数字序列
通常的用法是使用返回的当前时间,但任何“看似”的随机数都可以。不,您不能使用rand
创建种子,因为如果没有先前的种子设定,程序中的第一个rand
调用将始终返回相同的号码
至于rand()%(100-1)+1
部分,需要得到一个介于1和100之间的随机数。首先将随机数除以99(100-1),然后使用0到99之间的余数,然后加1得到1到100之间的值。该函数为所使用的随机数生成器种子。这是为了确保每次运行程序时不会得到相同的数字序列
通常的用法是使用返回的当前时间,但任何“看似”的随机数都可以。不,您不能使用rand
创建种子,因为如果没有先前的种子设定,程序中的第一个rand
调用将始终返回相同的号码
至于
rand()%(100-1)+1
部分,需要得到一个介于1和100之间的随机数。首先将随机数除以99(100-1),使用0到99之间的余数,然后加1得到1到100之间的值。您的问题不清楚。您的标题声称您询问的是srand
和rand
,如果是这样,您应该首先查找man
页面。然后,问题文本看起来更像是您想了解表达式x%(100-1)+1
的优先规则。您的问题不清楚。您的标题声称您询问的是srand
和rand
,如果是这样,您应该首先查找man
页面。然后,问题文本看起来更像是您想了解表达式x%(100-1)+1
的优先规则。1到100但不等于100范围实际上是[1,99]。谢谢!我了解种子设定以及rand()%(100-1)+1的工作原理/它现在做什么!:)我认为必须对优先级列表进行排序,但printf语句不是简单地以完全未排序的方式打印出随机数及其相应的PID值吗?另外,当PID由父进程设置并且“共享”给子进程时,为什么他要为getpid()设置种子?你们已经帮了大忙了!谢谢D1到100但不等于100范围实际上是[1,99],谢谢!我了解种子设定以及rand()%(100-1)+1的工作原理/它现在做什么!:)我认为必须对优先级列表进行排序,但printf语句不是简单地以完全未排序的方式打印出随机数及其相应的PID值吗?另外,当PID由父进程设置并且“共享”给子进程时,为什么他要为getpid()设置种子?你们已经帮了大忙了!谢谢D