The UNIX and Linux Forums  


Go Back   UNIX e Linux Forum > Inizio Forum > Di programmazione ad alto livello
.
google unix.com



Di programmazione ad alto livello Pubblica domande su C, C + +, Java, SQL, e di altri linguaggi di programmazione qui.

Più di UNIX e Linux Forum Argomenti potreste trovare utili
Filo Thread Starter Forum Risposte Ultimo Post
controllo per i non-valore zero philplasma UNIX for Dummies Domande & Risposte 6 01-08-2008 04:51 PM
controllo uid filthymonk Shell scripting e di programmazione 7 07-19-2007 11:40 PM
Verifica dei progressi cp MarGur UNIX for Dummies Domande & Risposte 0 05-15-2007 05:13 PM
Controllo di PXE maestro @ Altiris SUN Solaris 5 05-25-2004 01:06 AM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Cerca in questo Thread Rate Thread Modalità di visualizzazione
  #1 (permalink)  
Old 03-06-2008
ramkrix ramkrix is offline
Utente Registrato
  
 

Iscriviti Data: dicembre 2007
Ubicazione: Tamilnadu, India
Interventi: 52
Exclamation EOF sotto controllo

Salve,

Sono praticare esercizio programmi con chiamate di sistema.

Esercizio Domanda: scrivere una pogram di accettare il nome di un file da parte degli utenti. Il programma deve scrivere ecery quinto byte del file di output standard.

Il mio programma:

# Include <stdio.h>
# Include <fcntl.h>
# Include <error.h>

main ()
(
int fd, first_offset \u003d 5, move_offset \u003d 0, x \u003d 1;
char a, nome [20];
scanf ( "% s", nome);

fd \u003d open (nome, O_RDONLY, 0755);
printf ( "fd è% d", fd);

if (fd \u003d\u003d- 1)
(
printf ( "Errore");
exit (1);
)

while (x <5)
(
move_offset \u003d move_offset + first_offset;
lseek (fd, move_offset-1, 0);
read (fd, nome, sizeof (nome));
scrivere (1, nome, 1);
x + +;
)
)


Uscita:
[ramki @ lindesk3 sysint_ex] $ cc ex1.c-o ex1
[ramki @ lindesk3 sysint_ex] $ ./ex1
. / prova
FIVEfd è di 3

Il file "Test" di contenuti:
abcdFfghiIklmnVpqrsE



Ora la mia domanda:
1. nel programma, io ho usato un ciclo while con un varaible "X" e il confronto non è casuale per la mia scelta di 5. Invece voglio verificare la condizione EOF nella whilepart. Come controllare che.
Se si sta usando il file puntatore e fopen fn, possiamo usare while (feof (fp) \u003d\u003d 0). Ma qui abbiamo utilizzato syatem chiede e io non sappiamo come controllare la condizione qui.

2. In te l'output del programma, ho trovato "CINQUE" prima di stampare il numero filedescriptor. Ma, come per il mio programma di flusso, fd deve essere stampato e poi la prima uscita "cinque".

3.Is ci sono othet modo di scrivere il programma più semplice e preciso, in particolare utilizzando piointer per ottenere il nome del file, instaed di utilizzare Array.

Please Help ...

Grazie,
Ramkrix
  #2 (permalink)  
Old 03-06-2008
trifoglio shamrock is offline Forum Advisor  
Utente Registrato
  
 

Iscriviti Data: ottobre 2007
Posizione: Stati Uniti d'America
Interventi: 753
Citazione:
Originalmente inviato da ramkrix View Post

Ora la mia domanda:
1. nel programma, io ho usato un ciclo while con un varaible "X" e il confronto non è casuale per la mia scelta di 5. Invece voglio verificare la condizione EOF nella whilepart. Come controllare che.
Se si sta usando il file puntatore e fopen fn, possiamo usare while (feof (fp) \u003d\u003d 0). Ma qui abbiamo utilizzato syatem chiede e io non sappiamo come controllare la condizione qui.

2. In te l'output del programma, ho trovato "CINQUE" prima di stampare il numero filedescriptor. Ma, come per il mio programma di flusso, fd deve essere stampato e poi la prima uscita "cinque".

3.Is ci sono othet modo di scrivere il programma più semplice e preciso, in particolare utilizzando piointer per ottenere il nome del file, instaed di utilizzare Array.

Please Help ...

Grazie,
Ramkrix


Codice:
#include <stdio.h>

main(int argc, char *argv[])
{
    char *infile;
    FILE *stream;

    infile = argv[1];
    stream = fopen(infile, "r");
}

... ora è possibile utilizzare le funzioni di flusso di stato come feof o ferror.
  #3 (permalink)  
Old 03-07-2008
ramkrix ramkrix is offline
Utente Registrato
  
 

Iscriviti Data: dicembre 2007
Ubicazione: Tamilnadu, India
Interventi: 52
Red face

Grazie per la risposta trifoglio ..

Tis è il modo, ho bisogno di comprendere la condizione di cui ciclo while:

while (feof (stream) \u003d\u003d 0)

Una domanda a voi: invece di utilizzare la riga di comando args e libreria C FNS possiamo controllare ciò che hanno il programma assoluta le chiamate di sistema ..

Grazie in anticipo,
Ramkrix
  #4 (permalink)  
Old 03-07-2008
trifoglio shamrock is offline Forum Advisor  
Utente Registrato
  
 

Iscriviti Data: ottobre 2007
Posizione: Stati Uniti d'America
Interventi: 753
Citazione:
Originalmente inviato da ramkrix View Post
Grazie per la risposta trifoglio ..

Tis è il modo, ho bisogno di comprendere la condizione di cui ciclo while:

while (feof (stream) \u003d\u003d 0)

Una domanda a voi: invece di utilizzare la riga di comando args e libreria C FNS possiamo controllare ciò che hanno il programma assoluta le chiamate di sistema ..

Grazie in anticipo,
Ramkrix
È possibile utilizzare "assoluto le chiamate di sistema" invece di libreria standard C routine come fopen () e si può evitare di passare il nome del file di input da linea di comando come un argomento a scapito di hardcoding il nome del file di input in open () chiamata di sistema.

La chiamata di sistema è meglio per la lettura di 5 byte alla volta dal file di input e la stampa del quinto byte per lo standard output. Questo metodo è preferibile rispetto crescente e ripetutamente un contatore di test se x <5 o di controllo per EOF utilizzando il feof () funzione standard lib.


Codice:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

main(int argc, char *argv[])
{
    int fd;
    char name[5];

    fd = open("/path/to/input/file", O_RDONLY);

    while (read(fd, (void *) name, (size_t) 5) == 5)
        printf("the fifth byte is %c\n", name[4]);
}

  #5 (permalink)  
Old 03-10-2008
ramkrix ramkrix is offline
Utente Registrato
  
 

Iscriviti Data: dicembre 2007
Ubicazione: Tamilnadu, India
Interventi: 52
Ancora una volta grazie per le informazioni utili Shamrock.

vorrei chiedere l'ultima questione dalla sua risposta:
while (read (fd, (void *) nome, (size_t) 5) \u003d\u003d 5)

Il "(size_t) 5", che cosa significa e che fare? Bcoz ho letto da un libro che abbiamo bisogno di dare il sizeof () operatore alla fine. Inoltre vi sono comaparing al valore "\u003d\u003d 5"? Non ho potuto capire qui.

L'uno è al di sotto quello che ho codificato nel mio programma: read (fd, nome, sizeof (nome));

È stato il mio diritto uno?
  #6 (permalink)  
Old 03-10-2008
fpmurphy's Avatar
fpmurphy fpmurphy is offline Forum Staff  
Moderatore
  
 

Iscriviti Data: dicembre 2003
Luogo: Florida
Interventi: 1.937
Citazione:
L'uno è al di sotto quello che ho codificato nel mio programma: read (fd, nome, sizeof (nome));
È stato il mio diritto uno?
sizeof (nome) è di 20, poiché si nome definito come un array di 20 caratteri, cioè char nome [20]. Pertanto, il programma tenta di leggere 20 byte alla volta - senza alcun controllo degli errori.

Citazione:
while (read (fd, (void *) nome, (size_t) 5) \u003d\u003d 5)
Qui il programma tenta di leggere 5 byte e controlli che actally ha letto 5 byte. size_t è definito dalla norma ISO C per l'uso in dimensioni che rappresentano le informazioni ed è molto utile whien la portabilità del codice tra le varie architetture e modelli di programmazione è auspicabile. E 'richiesta per essere un tipo unsigned integrante. In genere si tratta di un lungo o int.
Closed Thread

Segnalibri

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 04:16 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0