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

    +135

    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
    void init(void)
    {
    	int i,j;
    
    	setup();
    	if (!fork())
    		_exit(execve("/bin/update",NULL,NULL));
    	(void) open("/dev/tty0",O_RDWR,0);
    	(void) dup(0);
    	(void) dup(0);
    	printf("%d buffers = %d bytes buffer space\n\r",NR_BUFFERS,
    		NR_BUFFERS*BLOCK_SIZE);
    	printf(" Ok.\n\r");
    	if ((i=fork())<0)
    		printf("Fork failed in init\r\n");
    	else if (!i) {
    		close(0);close(1);close(2);
    		setsid();
    		(void) open("/dev/tty0",O_RDWR,0);
    		(void) dup(0);
    		(void) dup(0);
    		_exit(execve("/bin/sh",argv,envp));
    	}
    	j=wait(&i);
    	printf("child %d died with code %04x\n",j,i);
    	sync();
    	_exit(0);	/* NOTE! _exit, not exit() */
    }

    Говно, вошедшее в историю.

    Запостил: avaaron, 03 Июня 2010

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

    • похоже на быструю прожку для правильной демонизации - двойной форк + сетсид - программы заданной на коммандной строке.

      только как-то видеть на конце exec("/bin/sh") ... не очень привычно.

      и вызов _exit() выдает что там где-то С++ порылся - либо в коде либо в мозгах.
      Ответить
      • мля и open("/dev/tty0").... наверное линуксоид какой писал....
        Ответить
        • да, это не очень позикс. на бзде не пойдет
          Ответить
      • При чем тут C++? _exit() зовется, если не нужно вызывать функции, зарегистрированные с помощью atexit(). man 2 _exit
        Ответить
        • я еще не разу не видел проблем с этим в С.

          а вот статические С++ объекты которые автоматом добавляют вызов деструкторов в atexit() коркают такие говнокоды с легкостью.
          Ответить
    • _die! not live!
      Ответить
    • >наверное линуксоид какой писал....
      Линус это писал для kernel 0.01. В 1991г.
      Ответить

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