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

    +143

    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
    #include <unistd.h>
    
    	        main()
    	        {
            int i=0;
            char *cmd[] = { "ls", "-l", (char *)0 };
            char *env[] = { "HOME=/usr/home", "LOGNAME=home", (char *)0 };
            int rr;
            for(i; i<6; i++)
            {
        switch(rr=fork())
        {
    case -1:execl ("/bin/ls", "ls", "-1", (char *)0);break;
    case 0:execle ("/bin/ls", "ls", "-l", (char *)0, env);break;
    case 1:execlp ("ls", "ls", "-l", (char *)0);break;
    case 2:execv ("/bin/ls", cmd);break;
    case 3:execve ("/bin/ls", cmd, env);break;
    case 4:execvp ("ls", cmd);break;
        }
            }
    
    	        }

    - Ну это работают.
    И проверяющий поставил плюс.

    Запостил: Niceblack, 24 Сентября 2011

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

    • Форматирование пиздец
      Ответить
    • а вообще, тонко.
      Ответить
      • Поясните мысль
        Ответить
        • такие вот выкрутасы - массивы, параллельные форки -- только чтобы содержимое каталога? К тому же могут отработать 2 команды
          Ответить
          • Я, может, чего-то туплю, но я тут вижу только два варианта развития событий:

            1. Дочерний процесс нормально создаётся и вызывает ls -l.
            2. fork по каким-то непонятным причинам умудряется завершиться с ошибкой, и тогда уже родительский процесс вызывает ls -1.

            А в каком случае fork вообще может вернуть 1-4? Где вы видели ОС, дающую пользовательским процессам такие PID?


            PID TTY TIME CMD
            1 ? 00:00:01 init
            2 ? 00:00:00 kthreadd
            3 ? 00:00:12 ksoftirqd/0
            6 ? 00:00:00 migration/0
            Ответить
            • А, там ещё for...

              Ну хорошо, создаст он шесть дочерних процессов ls, только зачем?
              Ответить
            • пардон, это я ступил с температурой - подумал, что fork() будет возвращать не PID, а порядковый номер попытки...
              Ответить
            • Загрузить ядро с параметром init=/bin/mylaba.
              Ответить
    • > main()

      И тут приходит C99...
      Ответить
    • скрипт на сишечке. заглядение!
      Ответить
    • очевидно, было тупейшее задание на лабах отработать exec* функции?
      Ответить

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