|
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/
|