Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

222
Visualizações
¿Por qué EOF se comporta de manera diferente en fgets y read?
#include <stdio.h> #define MAXLINE 4096 int main(int argc, char **argv) { char *s; char buf[MAXLINE]; s = fgets(buf, MAXLINE, stdin); // here, if replaced with read(0, buf, MAXLINE); return 0; }

La entrada es : 12 ctrl+d

  1. fgets no regresa hasta que ingrese ctrl+d nuevamente (es decir: 12 ctrl+dctrl+d ). ¿Por qué fgets no regresa cuando encuentra el primer EOF ? Parece que 12 ctrl+d no funciona.

  2. Pero cuando s = fgets(buf, MAXLINE, stdin); se reemplaza con read(0, buf, MAXLINE); read regresará (la entrada también es: 12 ctrl+d ).

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Presionando CTRL + d en la terminal:

  • simplemente significa vaciar todos los caracteres en stdin (el búfer de entrada) inmediatamente
  • NO activa una condición EOF en stdin
    (a menos que la línea/búfer actual esté casualmente vacío).

Así que presionando CTRL+D mientras ejecuta un programa ,

  • un fgetc() bloqueado regresará si lo hace dos veces consecutivas.
    1st = vaciar los caracteres actualmente almacenados en el búfer,
    2º = vaciar el búfer vacío; es decir, la condición EOF es válida para fgetc() y devuelve
    .
  • un fgetc() bloqueado regresará si lo hace una vez en una línea vacía.
    vacía un búfer stdin ya vacío, es decir, la condición EOF es válida para fgetc() y regresa.
  • una read() regresa inmediatamente tan pronto como se vacía la entrada.

Consulte las respuestas a esta pregunta para obtener más detalles.

over 4 years ago · Santiago Trujillo Relatório

0

En implementaciones comunes, fgets se basa en un bucle alrededor de read . Si llama a fgets , llama a read internamente. Escribir 1 2 Ctrl+D hace que read devuelva los dos caracteres "12" a fgets . Eso todavía no hace una línea completa, por lo que las llamadas fgets se read nuevamente. Dado que estamos leyendo desde un dispositivo terminal y no un archivo, por ejemplo, la read espera a que escriba más datos. Si vuelve a escribir Ctrl+D , read devuelve 0 caracteres, lo que fgets interpreta como un final de archivo y devuelve.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda