Newsgroup: it.comp.os.linux.development
Titolo: Problemino con una system call

Allora il seguente programma gira ma con un problema, stampa il numero di
byte letti ma i caratteri sono tutti strani e non quelli effettivi, sono
tutti simboli.
ECCO IL LISTATO:
_____________________________________________________________________
#include<stdio.h>
#include<fcntl.h>
#include<string.h>
#include<sys/types.h>
//QUESTO PROGRAMMA LEGGE DALLA TTY8 E SCRIVE L'OUTPUT A VIDEO
main()
{
int nn,tty_fd;
char *temp;
tty_fd=open("/dev/tty8",O_RDONLY);
if (tty_fd==-1) {printf("ERRORE\n");exit(1);}
nn=read(tty_fd, temp, 10);
printf("%s\n",temp);
printf("%d Byte Letti\n",nn);
//write(1, temp, 20);
close(tty_fd);
}
_____________________________________________________________________


I'm not prejudiced, I hate everyone equally.

scusa mi spiegheresti come?? malloc, alloc???
perchč spesso uso questa cosa e funziona, guarda:
__________________________
[...]
main(int argc, char *argv[])
[...]
char *temp;
temp=argv[2]
printf("%s", temp)
[...]
___________________________________
perchč cosě me lo stampa correttamente e nell'altro modo devo per forza
allocare memoria ??
Grazie di tutto comunque


 	while( (nn=read(tty_fd, temp, 8192)) != -1) /* meglio valori piů
						     alti come terzo
						     argomento a read()
						     (es. 4096, 8192) */
 		write(1, temp, nn);
	/*
 	printf("%s\n",temp);
 	write(1, temp, 20);
	*/
 	printf("%d Byte Letti\n",nn);
 	close(tty_fd);
 }
per migliorare le prestazioni sarebbe meglio al terzo argomento di
read() utilizzare valori piů elevati (come nel commento nel listato),
prova con time ./a.out e noterai la differenza.
-- 
                    |   .-.
Gianluca Di Corato  |  : | :  I N  P E A C E  W E  T R U S T
   (aka sgrung)     |  '/|\'

 Grazie di tutto comunque
ciao ... prego ... spero di essere stato chiaro ...


 Grazie di tutto comunque
ciao
-- 
             A (t-t°)
W (t, t°) = e^

grazie mille troppo gentili.

Ora il mio problema è questo:
devo fare un ciclo che termini con EOF (CTRL+D suppongo) in cui:
NEL FIGLIO:
- leggo dalla tty8 e metto nella stringa temp
- dalla stringa temp metto in un fifo creato con mkfifo
NEL PADRE:
- leggo dal fifo e metto nella stringa temp
- dalla stringa tempo scrivo nella tty8
Ma come faccio a fare un ciclo che termini con eof se devo mettere ciò che 
leggo da tty8 dentro la stringa temp? La mia bozza è questa, ma non gira, o 
meglio gira male:
#include<stdlib.h>
#include<stdio.h>
#include<fcntl.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
main(int argc, char *argv[])
{
int fd,fd1,pid,status,nn,ret;
float c;
char *temp;
temp=malloc(4096);
ret=mkfifo(argv[1],O_CREAT|0666);
if (ret == -1)  
        {
        printf("Errore nella chiamata mkfifo\n");
        exit(1);
        }
fd=open(argv[1],O_RDWR);
printf("FIFONAME= %s\n", argv[1]);
if (fd == -1)
        {
        printf("Errore nella chiamata open di fifo\n");
        exit(1);
        }
printf("%s\n",argv[2]);
fd1=open(argv[2],O_RDWR);
if (fd1 == -1)
        {
        printf("Errore nella chiamata open di tty\n");
        exit(1);
        }
pid=fork();
if (pid == -1)
        {
        printf("Errore nella chiamata fork\n");
        exit(1);
        }
close(0);
dup2(fd1,0);
if (pid != 0)           //sono nel padre
        {
        while ((c=getchar()) != EOF)
        //for(;;)
                {
                nn=read(fd,temp,BUFSIZ);
                write(fd1,temp,nn);
                }
        }
else                    //sono nel figlio
        {
        while((c=getchar()) != EOF)
        //for(;;)
                {
                nn=read(fd1,temp,BUFSIZ);
                printf("temp = %s\n",temp);
                write(fd,temp,nn);
                }
        }
sleep(1);
unlink(argv[1]);
printf("FIFO CANCELLATO\n");
free(temp);
printf("Memoria liberata");
close(fd);
close(fd1);
}