Здравствуй, суть такова, пытаюсь писать программу с GTK графическим интерфейом и есть еще одна программа, ее надо в темную (в терминале) запустить и весь вывод этой команды перенаправить в файл, в линуксе как программист не очень долго, точнее неделю))) Использую FASM и GCC. Вот в общем обьясните в чем мои ошибки: Код (Text): proc shell cmd ccall fork, 0 mov [pid], eax test eax, eax jne @F cmp eax, 0 jl @error ccall execl, terminal, terminal, [cmd] ccall _exit, 1 jmp @ok @@: ccall waitpid, [pid], exit_status, 0 cmp eax, [pid] jne @ok @error: ; erorr ccall gtk_message_dialog_new, 0, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, ev_destroy mov [dialog], eax ccall gtk_dialog_run, [dialog] ccall gtk_widget_destroy, [dialog] ret @ok:; its good ccall gtk_message_dialog_new, 0, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, terminal mov [dialog], eax ccall gtk_dialog_run, [dialog] ccall gtk_widget_destroy, [dialog] ret endp зы C++ не предлогать...
Ну во-первых, в gtk или в glib есть все необходимые функции для этого. Во-вторых, стоит делать примерно так: Код (Text): int spawn (char *name, char *fname) { int pid = fork (); if (pid) return pid; close (STDOUT_FILENO); open (fname, O_WRONLY); exec (...); } По-хорошему, может не стоит полагаться на то, что open открывая fname выдаст в качестве файлового дескриптора именно значение 2, но... Я бы положился. А если ты не согласен, то тебе обязательно надо изучить `man dup'. В-третьих, есть замечательная функция system, надо просто написать: Код (Text): system ("find / -name passwd >/tmp/passwd-files.txt"); Но я склоняюсь к мысли, что если ты перелезаешь с вендовс, то тебя просто восхитят glib'овские g_spawn_* функции (по-моему так они называются) тем количеством аргументов, которые они принимают. Ты просто не сможешь от них отказаться. уж извини что я примеры на C пишу, но на C их писать проще. Если тебе надо, то ты сам на ассемблер переводи, ok? Или если очень надо, я могу прогнать через gcc с опцией -S, хотя ты и сам можешь это сделать.