Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 下面srand(getpid()和rand()在做什么?_C_Random_Ipc_Fork_Srand - Fatal编程技术网

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

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) {

我希望在Unix环境中创建一个优先级列表,其中包含来自分叉进程的PID。我找到了下面的代码部分,但我不明白rand和srand(getpid())实现了什么。如何使用随机数创建“优先级列表”

我知道,
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