From: Marcelo B. <md...@ma...> - 2000-10-18 09:56:44
|
---[ printf("Em ter, 17 out 2000, André Casteliano escreveu"); ]--- // Marcelo Beckmann wrote: // > // > Andre, como assim "linha com tamanho definido"? Não entendi bem essa // > parte... // > // // Opa... tamanho definido... tipow: // // execl(programa,argumento1, argumento2, argumento3, argumentoN...); // // Mas naum dá prá inserir argumentos em tempo de execução... Mas que palha essa função..... // tipow, dá prá colocar o argumento como sendo uma variável, aí o // argumento pode mudar, mas naum podemos ADICIONAR um argumento... tá // entendendo ??? Hum, leia mais pra frente.... // > Outra coisa: voce ja viu sobre execve()? // > No livro "bla bla bla em 24horas " tem alguns exemplos usando ela, // > posso te passar na sequencia ou via irc. // // Opa... se puder me mandar mais informações sobre ela seria legal... :-) // // O execve na verdade faz parte de um conjunto de funções... (exec**)... e // a execl é uma delas :P Mas isso eu sei, hehehe. Elas tem algumas diferenças entre si, mas em essencia destinam-se ao mesmo propósito, depende do que se for fazer... Seguinte, ai vai: -------------[ explicação/resumo sobre execve() ]------------------ #include <unistd.h> int execve(const char *filename, const char *argv[], const char *envp[]); Essa função recebe três argumentos: [*] O nome de arquivo do programa executável binário ou do script do interpretador; [*] O array argv[] a ser passado para o programa; [*] O array envp[] de variáveis de ambiente a exportar; ------------------------[ /execve() ]------------------------------ manja a declaração completa de main? int main(int argc, char **argv) Entao: argc: número de parâmetros passados em linha de comando (ou via execve) para o programa; argv: um vetor de caracteres que contém a linha de comando usada para chamar o programa. Resolvido? Dúvidas? bla bla bla? o argv[] da função execve pode ser um vetor de caracteres que o teu programa monte, ou seja, pode passar os argumentos que você quiser e alterar em tempo de execução os parâmetros e a quantidade deles. Bom, com isso, acho que restam poucas chances pra sobrevivencia do system()... A grande vantagem de execve() em relação ao system() é que o programa chamador (o processo pai) não fica preso, possibilitando um controle melhor das coisas.... // > Hum.... pano pra manga ai.... Depois do pppd a gente nao vai // > executar mais nada nao? E os scripts pré e pós discagem? // // O script pós discagem é fácil, o pppd retorna se conseguiu conectar... // aí a aplicação-mãe roda o processo... Andre, um detalhe ai.... O pppd só retorna quando a conexão terminar. Se o processo pai usar system(), todo o processo pai ficara preso até que o pppd retorne... Ou seja: não será possivel clicar num botão de "desligar" no processo/programa pai, por exemplo, por que o pai estará com o processamento preso durante esse tempo - para liberá-lo, o pppd precisa morrer.... // > Não é por nada não, mas pra gente que já trabalhou com os forks e // > afins usar system() me parece meio paia ai ó.... // // System() naum é paia naum! :-P // // É uma mão na roda quando precisamos executar comandos de shell a partir // de um programa C... :P Tudo depende da abordagem, da situação: * processo filho é "pequeno" ou "grande"; * a execução do processo filho é rápida ou demorada; * o processo pai deverá operar em modo BLOCKING ou NOM BLOCKING; * facilidade de implementação de uma forma ou outra; // Minha ideía, caros coders, é que o processo-filho (onde vai estar a // chamada ao pppd) tenha o mínimo de código... Só mesmo executa o pppd e // comunica com o processo-pai via IPC... mais nada. Via system() creio que não será possivel usar IPC (pelo menos para semaforos, shared memory, e possivelmente pipes). Por que? Por que com system, o processo pai fica preso (modo BLOCKING), e se ele está preso, ele não executa nada, portanto, não poderá acessar um semaforo ou uma shm _enquanto_ o processo filho estiver rodando. // Acho que assim fica melhor... dá prá controlar beleza... Pense bem sobre o system(), dependendo da abordagem ele não será adequado para os propósitos que temos em mente... E o que temos em mente??? Dominar o mundo, claro!!! Não precisa ser amanhã... Pode ser na semana que vem.... hawhuiahawhuiahawhuiahawhuiahawhuiahawhuiahawhuiahawhuiahawhuia (esse negócio de irc vicia.... :) // E lembrem-se: Os dois processos rodam COMPLETAMENTE em separado... dá // prá fazer praticamente QUALQUER coisa... :P Mas isso não acontece com system(), por que enquanto o processo FILHO está RODANDO o processo PAI está PARADO (preso, bloqueado). Uma outra coisa, que eu estou desconfiando que é possível, é que seria possivel o pai ter um controle do processo fiho (matá-lo com kill), o que seria interessante pra implementar um botao de "cancelar" para o usuario poder interromper o pppd e abortar a conexao. Quanto a esse detalhe, ainda preciso confirmar se isso é mesmo possivel, ai quando eu souber eu passo pra voces a informação mais precisa... // Bom, é isso aí... aguardo comentários, Beleza, os meus estão ai. Lembra os fontes do livro blablabla 24 horas que eu te passei? Então, da uma olhada nos do capitulo 18 (arquivos 18LST**.c), tem vários exemplos lá. Mais de noite, no irc, a gente tb pode ver mais sobre isso. Ah, e como é que você tá ai mano? Melhorou da febre e coisa e tal? Tomara que voce melhore o quanto antes, não vejo a hora de te ver no gaz de novo. // []'s // Hurrruuuu! Abração ai tb. -- #=-----------------------+----------------------#---------------=# | Marcelo D. Beckmann -----#173935----* | CL5 2.2.14 | md...@ma... UIN [53189692] | Slack 7 2.2.13 # | =-#--=[ http://marcelobeckmann.cjb.net ]=--#----------------# + +|+ | 233MMX 32MB 8.4+3.2GB Quantum Fireball ] /V\ #--------466.94--------------[ OPL3SAx TGUI9680 2MB 33600 ] /(.)\ "Estamos de volta aos tempos em que os homens eram homens ] ^`~´^ e programavam seus próprios drivers de dispositivo."L.T. ] #------#----=[ serialcoder ]=- + -=[ see me in wm.themes.org ]=--' RTS-[CTS]-DLE-STX-53-18-96-92-CRC-06-66-DLE-ETX-[/CTS]-[RTS]-CTS-[ACK] |