Как работает while в данном конкретном случае?

я хотел знать, как в то время как работал в этом конкретном коде:

#include <stdio.h>
#include <unistd.h>

void main(){
    int count=0;    

    fork();
    printf("PID: %dnCounter: %dn",getpid(),++count);
    sleep(1);

    while(1);
}

Я только использовал while (или делаю while) с кодом внутри цикла, никогда не использовал его вне цикла, поэтому я не понимаю, как это может работать. Спасибо за время и терпение.

4 ответа

  1. Условия по умолчанию C можно прочитать в «is (condition) different from 0?».
    В вашем случае это «While (1) is different from 0», таким образом, вызывает бесконечный цикл.
    Программа будет бесконечно петлять в этой точной инструкции (в то время как).

  2. while(1);
    

    по существу

    while ( 1 == 1)
    {
    }
    

    в синтаксисе C вам не нужен код внутри для while, for, ifинструкций.

    этот код ниже синтаксически допустим

    if ( 1 == 1)
    ;
    else
    ;
    

    или

    if ( 1 == 1 ) ; else ;
    

    где оператор if ничего не будет делать. Вы можете сделать то же самое со всеми остальными — while, for,и так далее.

  3. В linux, после компиляции этой программы с gcc, как это

    gcc -o main main.c
    

    И запуск программы, как это

    ./main
    

    Если вы пытаетесь распечатать процессы с «главным» именем, у нас есть это.

    $ ps aux | grep main
    hoenir    3084 74.3  0.0   4160   676 pts/2    R+   19:34   0:04 ./main
    hoenir    3085 74.3  0.0   4160    72 pts/2    R+   19:34   0:04 ./main
    

    После вызова fork() программа порождает дочерний процесс основного процесса и таким образом, заставляя код слева (после fork) выполняться в Родительском и дочернем параллельно, тем самым делая цикл while, цикл бесконечно.
    Как другой пользователь уже сказал в то время как(0) это как сказать в то время как(false) и viceversa в то время как(1) или в то время как(-1) или другое число, которое отличается от 0, будучи в то время как(true).

  4. Я знаю, что код делает я просто не понимаю, как он повторяет код, что это вне цикла. Это как будто делает цикл do-while

    Содержание вне цикла «повторяется» не имеет ничего общего с while()утверждением.

    При запуске программа сталкивается с fork();инструкцией. При этом создается новый процесс с копией адресного пространства текущего процесса. Затем оба продолжают выполнение одновременно. Каждый процесс выполняет свою собственную printf()инструкцию и отображает соответствующий идентификатор процесса.

    Каждый процесс, в конце концов, сталкивается с while(1);оператором. В C любое ненулевое целое число эквивалентно true при оценке условия. Следовательно, логически, while(1);эквивалентно while(true);. Точка с запятой указывает, что тело цикла пусто.

    Таким образом, когда любой из процессов достигает while(1);утверждения, он застревает в бесконечном цикле.

    printf()Оператор, выполняющийся дважды, обусловлен наличием двух процессов и не связан с while(1);оператором.