The UNIX and Linux Forums  

Go Back   O UNIX e Linux Forum > Top Fóruns > Alto Nível de programação
.
google unix.com



Alto Nível de programação Post perguntas sobre C, C + +, Java, SQL, e outras linguagens de programação aqui.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
verificação de valor diferente de zero philplasma UNIX para Dummies Perguntas & Respostas 6 01-08-2008 04:51
verificação uid filthymonk Programação Shell Script e 7 07-19-2007 11:40
Verificado cp progresso MarGur UNIX para Dummies Perguntas & Respostas 0 05-15-2007 05:13
Verificado por PXE maestro @ Altiris Sun Solaris 5 05-25-2004 01:06

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 Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 03-06-2008
ramkrix ramkrix is offline
Usuário
  
 

Join Data: dezembro 2007
Localização: TamilNadu, ÍNDIA
Lugares: 52
Exclamation EOF verificar a seguir

Oi,

Estou praticando exercício programas com chamadas de sistema.

Pergunta Exercício: escrever um pogram a aceitar um nome do usuário. O programa deverá escrever ecery quinto byte do arquivo para a saída padrão.

Meu Programa:

# 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 ( "erro");
exit (1);
)

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


Saída:
[ramki @ lindesk3 sysint_ex] $ cc ex1.c-o ex1
[ramki @ lindesk3 sysint_ex] $ ./ex1
. / teste
FIVEfd é 3

O arquivo "Teste" conteúdo:
abcdFfghiIklmnVpqrsE



Agora minha pergunta:
1. no programa, eu usei um loop Embora com um varaible "X" e compará-lo ao acaso nenhum dos meus escolha 5. Em vez disso, gostaria de verificar a condição EOF no whilepart. Como verificar isso.
Se estamos usando arquivo ponteiro e fopen fn, podemos usar while (feof (fp) \u003d\u003d 0). Mas aqui usamos syatem chamadas e eu não sei como verificar a condição aqui.

2. Na saída te programa, eu achei "cinco" antes de imprimir o número filedescriptor. Mas, como por meu programa de fluxo, fd deverá ser impresso em primeiro lugar e depois a saída "cinco".

3.Is houver qualquer othet forma de escrever o programa mais simples e precisa, especialmente utilizando piointer para obter o nome do arquivo, instaed de utilizar Array.

Please Help ...

Obrigado,
Ramkrix
  #2 (permalink)  
Old 03-06-2008
shamrock shamrock is offline Forum Advisor  
Usuário
  
 

Join Date: Oct 2007
Localização: E.U.A.
Lugares: 753
Citação:
Originally Posted by ramkrix View Post

Agora minha pergunta:
1. no programa, eu usei um loop Embora com um varaible "X" e compará-lo ao acaso nenhum dos meus escolha 5. Em vez disso, gostaria de verificar a condição EOF no whilepart. Como verificar isso.
Se estamos usando arquivo ponteiro e fopen fn, podemos usar while (feof (fp) \u003d\u003d 0). Mas aqui usamos syatem chamadas e eu não sei como verificar a condição aqui.

2. Na saída te programa, eu achei "cinco" antes de imprimir o número filedescriptor. Mas, como por meu programa de fluxo, fd deverá ser impresso em primeiro lugar e depois a saída "cinco".

3.Is houver qualquer othet forma de escrever o programa mais simples e precisa, especialmente utilizando piointer para obter o nome do arquivo, instaed de utilizar Array.

Please Help ...

Obrigado,
Ramkrix


Código:
#include <stdio.h>

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

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

... agora você pode usar as funções como feof stream estatuto ou fError.
  #3 (permalink)  
Old 03-07-2008
ramkrix ramkrix is offline
Usuário
  
 

Join Data: dezembro 2007
Localização: TamilNadu, ÍNDIA
Lugares: 52
Red face

Obrigado por sua resposta shamrock ..

Tis é o caminho, eu preciso incluir a condição do ciclo while:

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

Só mais uma pergunta para você: em vez de utilizar a linha de comando e C args biblioteca FNS podemos verificar isto por ter o programa absoluta chamadas de sistema ..

Thanks in advance,
Ramkrix
  #4 (permalink)  
Old 03-07-2008
shamrock shamrock is offline Forum Advisor  
Usuário
  
 

Join Date: Oct 2007
Localização: E.U.A.
Lugares: 753
Citação:
Originally Posted by ramkrix View Post
Obrigado por sua resposta shamrock ..

Tis é o caminho, eu preciso incluir a condição do ciclo while:

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

Só mais uma pergunta para você: em vez de utilizar a linha de comando e C args biblioteca FNS podemos verificar isto por ter o programa absoluta chamadas de sistema ..

Thanks in advance,
Ramkrix
Você pode usar o "sistema absoluto chamadas" em vez do padrão biblioteca C rotinas como fopen () e você pode evitar de passar o arquivo de entrada da linha de comando como um argumento em detrimento da hardcoding o arquivo de entrada no sistema open () call.

A melhor abordagem é chamada de sistema para leitura de 5 bytes em um momento a partir do arquivo de entrada e imprimir o quinto byte a saída padrão. Este método é preferível incrementar mais um balcão e repetidamente testando se x <5 ou controlo de EOF utilizando os feof () padrão lib função.


Código:
#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
Usuário
  
 

Join Data: dezembro 2007
Localização: TamilNadu, ÍNDIA
Lugares: 52
Mais uma vez obrigado pela informação útil Shamrock.

deixe-me perguntar-lhe a última causa de sua resposta:
while (read (fd, (void *) nome, (size_t) 5) \u003d\u003d 5)

A "(size_t) 5", o que significa isso e vai fazer? Bcoz desde que li um livro que precisamos dar ao sizeof () operador no final. Também são comaparing-lo ao valor "\u003d\u003d 5"? Eu não poderia compreender aqui.

A seguir um código é o que eu no meu programa: read (fd, nome, sizeof (nome));

Foi uma mina de um direito?
  #6 (permalink)  
Old 03-10-2008
fpmurphy's Avatar
fpmurphy fpmurphy is offline Forum Staff  
Moderador
  
 

Join Data: dezembro 2003
Localização: Florida
Posts: 1.941
Citação:
A seguir um código é o que eu no meu programa: read (fd, nome, sizeof (nome));
Foi uma mina de um direito?
sizeof (nome) é de 20, desde que nome definido como um conjunto de 20 caracteres ou seja, char nome [20]. Por conseguinte, o programa tenta ler 20 bytes de uma vez - com nenhum erro verificação.

Citação:
while (read (fd, (void *) nome, (size_t) 5) \u003d\u003d 5)
Aqui, o programa tenta ler 5 bytes e verifica que tem actally ler 5 bytes. size_t é definido pela norma ISO C para utilização na representação dimensão informação e é muito útil whien código portabilidade em diferentes arquiteturas e modelos de programação é desejável. Ele é necessário para ser um tipo unsigned integrante. Normalmente, é um int ou longo.
Closed Thread

Marcadores

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 05:21.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0