1. Си / Говнокод #6521

    +130

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    #include <stdio.h>
    #include <signal.h>
    #include <unistd.h>
    #include <sys/wait.h>
    void sighndlr_1(int signo) { //obrabot4ik dlya 1go processa
        printf("I'm child process #1. I've got SIGINT! :) So, I won't do anything...\n"); //prosto vyvod na ekran soobscheniya o polu4enii signala
    }
    
    void sighndlr_2(int signo) { //dlhya 2go
        printf("I'm child process #2. I've got SIGINT :)\n");
    }
    
    int main(int argc, char **argv) {
        pid_t pid1,pid2,pid3,pid4; //4 do4ernih processa
        static struct sigaction act1,act2,act3; //3 struktury dlya 3h processov
        act1.sa_handler = sighndlr_1; //ustanovka obrabot4ika dlya 1 struktory
        act2.sa_handler = sighndlr_2; //dlya 2i
        act3.sa_handler = SIG_IGN; //ignoriruem signal v 3 strukture
        switch(pid1 = fork()) { //sozdaem 1 do4erniy process
        case -1: //vihodim pri oshibke sozdaniya
    	printf("Error fork\n");
    	exit(1);
    	break;
        case 0:
    	printf("Child process #1 started (pid = %d)\n", getpid()); //soobshenie ob uspeshnom sozdanii i vyvod pid
    	sigaction(SIGINT,&act1,NULL); //ustanovka struktury obrabot4ika dlya SIGINT
    	for(;;) pause(); //beskone4nyi cikl
    	break;
        default:
        switch(pid2 = fork()) { //sozdaem 2 process
        case -1:
    	printf("Error fork\n");
    	exit(1);
    	break;
        case 0:
    	printf("Child process #2 started (pid = %d)\n", getpid());
    	sigaction(SIGINT,&act2,NULL); //dlya SIGINT
    	sigaction(SIGQUIT,&act3,NULL); //ignorim SIGQUIT
    	for(;;) pause();
    	break;
        default:
        switch(pid3 = fork()) { //3 process
        case -1:
    	printf("Error fork\n");
    	exit(1);
    	break;
        case 0:
    	printf("Child process #3 started (pid = %d)\n", getpid());
    	sigaction(SIGINT,&act3,NULL); //ignorim SIGINT
    	for(;;) pause();
    	break;
        default:
        switch(pid4 = fork()) { //4 process
        case -1:
    	printf("Error fork\n");
    	exit(1);
    	break;
        case 0:
    	printf("Child process #4 started (pid = %d)\n", getpid());
    	setsid(); //menyaem identifikator seansa dlya processa
    	printf("Process #4 changed sid\n");
    	for(;;) pause();
    	break;
        default:
        printf("Finishing parent process... (pid = %d)\n", getpid());
        exit(0); //zavershaetsya roditelsky process
        break;
        }        
        break;
        }
        break;
        }
        break;
        }
    }

    Лаба по курсу операционных систем. Нужно было создать 4 дочерних процесса, и для каждого процесса создать свои обработчики для сигнала SIGINT или SIGQUIT. Полученный говнокод полон повторяющихся конструкций, и слишком сильно запутан операторами switch-case.

    Запостил: Boten, 30 Апреля 2011

    Комментарии (36) RSS

    • > //sozdaem 1 do4erniy process
      быдлотранслит детектед
      Ответить
      • не быдло, по-Вашему, было бы так: sozdaem 1 docherniy process?
        Ответить
        • вот так:

          "создаём один дочерний процесс"
          Ответить
        • анон выше озвучил
          или KOI-8 не скомпилируется? :-D
          Ответить
          • хм-м.. чем в таком случае отличается быдлотранслит и транслит?
            Ответить
            • для транслита есть ГОСТы, а для быдлотранслита - быдлоГОСТы
              Ответить
              • И всё же, как тогда будет не быдло? Очень хочется посмотреть.
                Ответить
                • англ. яз. кажется ещё в младших классах начинают изучать...
                  Ответить
                  • причем здесь английский? мы правила транслита обсуждаем
                    Ответить
          • кафедральные компы являются тонкими клиентами, в которых раскладку клавиатуры хрен настроишь. а извращаться со всякими экранными клавиатуры нет времени.
            Ответить
        • блин, русские буквы даже древнейший "лексикон" поддерживал...
          Ответить
          • Может на компе кодовой станицы не было соответствующей.
            Ответить
            • Или с такого набиралось...
              http://www.amobile.ru/images/invention/DynaTAC8000X.jpg
              Ответить
    • Собственно все минусы, указанные для данного ГК, вытекают из первого слова описания.
      Ответить
      • абсолютно согласен. такой код по определению не может быть хорошим.
        Ответить
    • и да, четвертый инклуд оказался не нужен. лишнее подтверждение говености.
      Ответить
    • break;
          }        
          break;
          }
          break;
          }
          break;

      никогда такого чуда не видел ))
      Ответить
    • Это служба психологической помощи?
      Помогите, вокруг какаято хуйня творится. Что мне делать?
      Ответить
    • Копипаста из манообразного, разбавленная транслитом - сделайте меня развидеть это.
      Ответить
    • Очень похоже на МГУ им. Ломоносова, фак ВМК, 3 семестр с преподом Столяровым А.В. ))))
      Ответить

    Добавить комментарий