Article View: es.comp.os.linux.programacion
Article #11274problemas con sockets y fork() --- stdout?
From: BloKe
Date: Mon, 03 Dec 2001 21:33
Date: Mon, 03 Dec 2001 21:33
113 lines
3074 bytes
3074 bytes
Hola gente,
estoy desarrollando un bot de irc, y segun lo hago me voy topando con
ciertos problemas, pero he llegado a uno del cual no puedo pasar. EN el
programa en si llamo a fork() para crear un proceso hijo q llame a una
funcion q se ejecuta cada 30 minutos. La cosa es q esta funcion (mete_saca)
en lugar de escribir en el irc (lo q haria si la ejecuto fuera del proceso
hijo) lo hace en la consola. He probado a poner dentro del proceso hijo
dup2(sock, STDOUT_FILENO);
dup2(sock, STDIN_FILENO);
pero ahora en lugar de escribir en el irc o la consola no aparentenmente no
escribe en ningun lado. Apreciaria mucho vuestra ayuda.
Aqui pongo el main y la funcion en cuestion a ver si me podias dar alguna
idea mas.
Muchas gracias,
BloKe
//el main
main()
{
struct sockaddr_in them;
char gbuf[buf], sbuf[buf], bufa[buf];
char serv[buf], *suppaddr;
int pid = fork();
if(pid==0)
{
mete_saca();
}
else
them.sin_addr.s_addr = inet_addr(SERVIDOR);
them.sin_port = htons(PUERTO);
them.sin_family = AF_INET;
sock = socket(AF_INET, SOCK_STREAM, 0);
if ((connect(sock,(struct sockaddr *)&them,sizeof(them)))<0)
{
suppaddr = lookup(SERVIDOR);
them.sin_addr.s_addr = inet_addr(suppaddr);
if ((connect(sock,(struct sockaddr *)&them,sizeof(them)))<0) {
printf("No puedo conectar con %s\n\n", SERVIDOR);
close(sock);
exit();
}
}
bzero(gbuf, strlen(gbuf));
do_irc_reg(gbuf);
irc_read();
}
//el mete_saca()
void mete_saca()
{
char sbuf[buf], gbuf[buf];
FILE *file, *fopen();
char path[buf];
sprintf(path, "archivos/chanlist\0");
file = fopen(path, "r");
if (file)
{
while(fgets(gbuf, sizeof(gbuf), file))
{
sprintf(sbuf, "join %s\n\r", gbuf);
ksend(sbuf);
bzero(sbuf, strlen(sbuf));
bzero(gbuf, strlen(gbuf));
}
fclose(file);
}
sleep(1800);
sprintf(sbuf, "join 0\r");
ksend(sbuf);
bzero(sbuf, strlen(sbuf));
mete_saca();
}
//y aki os pongo la funcion q uso para escribir en el irc
ksend(char *string)
{
write(sock, string, strlen(string));
bzero(string, strlen(string));
}
Gracias de nuevo.
Technical Details
Message-ID:
<9ugqbf$9d8$1@talia.mad.ttd.net>Path:
arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.cwix.com!newsfeed.bcn.ttd.net!news.mad.ttd.net!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII-7-bit X-Google-Thread: f86c8,8997bc5c6184d641,start X-Google-Attributes: gidf86c8,public X-Google-ArrivalTime: 2001-12-03 13:33:39 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.cwix.com!newsfeed.bcn.ttd.net!news.mad.ttd.net!not-for-mail From: "BloKe" <bloke@noquierospamtelepolis.com> Newsgroups: es.comp.os.linux.programacion Subject: problemas con sockets y fork() --- stdout? Date: Mon, 3 Dec 2001 22:33:28 +0100 Organization: Telefonica Transmision de Datos Lines: 116 Message-ID: <9ugqbf$9d8$1@talia.mad.ttd.net> NNTP-Posting-Host: 213-4-15-106.uc.nombres.ttd.es X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 6.00.2600.0000 X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000