Запуск приложения\скрипта в консоли 0_о

Тема в разделе "WASM.UNIX", создана пользователем dgs, 9 фев 2010.

  1. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Здравствуй, суть такова, пытаюсь писать программу с GTK графическим интерфейом и есть еще одна программа, ее надо в темную (в терминале) запустить и весь вывод этой команды перенаправить в файл, в линуксе как программист не очень долго, точнее неделю))) Использую FASM и GCC. Вот в общем обьясните в чем мои ошибки:

    Код (Text):
    1. proc shell cmd
    2.  
    3.     ccall       fork, 0
    4.     mov     [pid], eax 
    5.     test        eax, eax
    6.     jne     @F
    7.     cmp     eax, 0
    8.     jl      @error     
    9.     ccall       execl, terminal, terminal, [cmd]
    10.     ccall       _exit, 1
    11.     jmp     @ok
    12. @@: ccall       waitpid, [pid], exit_status, 0
    13.     cmp     eax, [pid]
    14.     jne     @ok
    15. @error:    ;                            erorr
    16.     ccall   gtk_message_dialog_new, 0, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, ev_destroy
    17.     mov     [dialog], eax
    18.     ccall   gtk_dialog_run, [dialog]
    19.     ccall   gtk_widget_destroy, [dialog]
    20.     ret
    21. @ok:;                           its good
    22.     ccall   gtk_message_dialog_new, 0, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, terminal
    23.     mov     [dialog], eax
    24.     ccall   gtk_dialog_run, [dialog]
    25.     ccall   gtk_widget_destroy, [dialog]   
    26.     ret
    27. endp
    зы C++ не предлогать...
     
  2. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    исходник
     
  3. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    странно, два раза не смог скинуть архив

    http://fasm.moy.su/table.tar.gz
     
  4. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    плиз хелп ми >_<
     
  5. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Ну во-первых, в gtk или в glib есть все необходимые функции для этого.
    Во-вторых, стоит делать примерно так:
    Код (Text):
    1. int spawn (char *name, char *fname)
    2. {
    3.         int pid = fork ();
    4.         if (pid)
    5.                 return pid;
    6.         close (STDOUT_FILENO);
    7.         open (fname, O_WRONLY);
    8.         exec (...);
    9. }
    По-хорошему, может не стоит полагаться на то, что open открывая fname выдаст в качестве файлового дескриптора именно значение 2, но... Я бы положился. А если ты не согласен, то тебе обязательно надо изучить `man dup'.

    В-третьих, есть замечательная функция system, надо просто написать:
    Код (Text):
    1. system ("find / -name passwd >/tmp/passwd-files.txt");
    Но я склоняюсь к мысли, что если ты перелезаешь с вендовс, то тебя просто восхитят glib'овские g_spawn_* функции (по-моему так они называются) тем количеством аргументов, которые они принимают. Ты просто не сможешь от них отказаться.

    уж извини что я примеры на C пишу, но на C их писать проще. Если тебе надо, то ты сам на ассемблер переводи, ok? Или если очень надо, я могу прогнать через gcc с опцией -S, хотя ты и сам можешь это сделать.
     
  6. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Спасибо, великодушное))) буду разбирать)))