From: <dig...@ya...> - 2001-02-13 20:12:43
|
[ Marcelo Beckmann escreveu: ] -> ---[ printf("Em dom, 04 fev 2001, Alex Borro escreveu"); ]--- -> # Fala pessoal... -> # -> # queria saber se vcs conseguiram descobrir a rotina em C que pega -> o -> # código de retorno de um programa executado... entenderam ??? -> Aquele -> # problema de executar o pppd e o chat de dentro do programa e -> saber com -> # que código eles finalizaram... -> # valeu.,.. -> # -> -> Ae Alex, ai coders -> -> tinha que ver essa parada com o André. Tudo depende de como o LC -> chama o pppd, pipe, fork, execve? -> -> Lembra André, quando a gente mexeu com smf-sm-shm? waitpid()? -> será que é por ai? Lembro sim Marcelão ... naum dá prá esquecer .. hehehe Tipo, vc deve tá meio enferrujado, pq nós mexemos bastante com isso ... então lá vai uma mini-aula procês ... ;-) man fork, execve, waitpid fork(): Cria um processo-filho execve(): Executa um comando waitpid(): Faz com que o processo-pai (ou mãe hehehehe) aguarde o retorno do filho ... bastaria: ----- [ corta ] ---- pid_t child_pid; int child_status; char comando[] = "discar"; char args[] = "provedor"; main () { if ((child_pid = fork()) !=0) { printf ("Xiiiii, deu merda!\n"); exit (1); } else { /* Aqui já é o processo-filho ... */ execve (comando, args, environ); exit (127); } /* Processo-pai (ou mãe) de novo ... */ do { if (waitpid (child_pid, &status, 0) = -1) { printf ("Xiii, deu merda!\n"); return -1; } else return status; } while (1); /* Forever ... ;-) */ } -------- [ corta ] -------- Bom, os sm, shm, etc que o Marcelão falou, aí já é na área do IPC ... (Inter Process Communication) ... fazer com que o processo-pai, troque dados com o processo-filho ... aí entram os sockets, pipes, Shared Memorys, etc, etc, etc .... Marcelão, desculpa aí se eu tou sendo básico demais, é que o pessoal provavelmente não varou (ainda) várias madrugadas estudando isso como a gente ... :P Bom, o código acima não foi testado (escrevi ele direto no programa de mail), mas deve funcionar sem problemas. Ele deve retornar o codigo de termino do programa invocado pelo execve ... :) Isso ja seria o suficiente pra que escrevessemos boa parte do LC em pure C ... MAS, CONTUDO, ENTRETANTO, "Houston, we STILL have a problem!" ;-PPP Eu tinha começado um TODO list ... e acabei deixando-o meio de lado com a correria que tava aki ... Nele havia detalhado as várias partes que iriam compor a versão em pure C do LinuxCall ... nós ainda temos problemas em algumas outras ... O lance de pegar o retorno do processo poderia até mesmo ser feito usando-se a função system() ... :) Ainda necessitamos verificar a parte de acesso por parte de usuários não-root e o lance de rodar os processos-filho com permissão root, enquanto o processo-mãe, pai, o diabo que for, roda como user comum ... ------ [ some days before ] ------ Pessoal, quando eu escrevi a parte de cima do mail, ainda não tinha achado solução pro fork como root ou como user comum ... bom agora eu achei ! ;-) man getuid, geteuid, setuid, seteuid Demais mermo, dispensa apresentações ... :) Bom, agora é promessa: Em no máximo 8 dias estarei enviando o primeiro BETA (espero que funcional) do LinuxCall em pure C :-PPPP Falows coders, quaisquer idéias a respeito, estamos ae prá ouvir ... :) []'s -- André Casteliano Analista de Sistemas +-=-=[ dig...@us...]=-=-+ [ Linux User: # 178853 Machine: # 79923 ] [ Linux Heavy User - Powered by Slackware 7.1 ] [ http://www.geocities.com/andre_casteliano/ ] +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+ [ LinuxCall - The Linux Dialer ] [ http://linuxcall.sourceforge.net ] +-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-+ __________________________________________________ Do You Yahoo!? Get personalized email addresses from Yahoo! Mail - only $35 a year! http://personal.mail.yahoo.com/ |