2010-03-12 15 views
7

¿Hay alguna limitación de longitud de entrada estándar (en cantidad de entrada o velocidad de entrada)?¿Está stdin limitado en longitud?

+5

¿por qué no publica el código que le causa problemas? – naumcho

+0

pregunta es general. Sobre los principales rools y conceptos. – Rella

+0

La cantidad de entrada en el búfer la determina el sistema operativo, creo. Si el búfer está lleno, las escrituras intentadas pueden/se bloquearán, y si el búfer está vacío, las lecturas intentadas pueden/se bloquearán. (Supongo que aquí). – dreamlax

Respuesta

1

¡Probablemente dependa del controlador stdin!

stdin (como concepto) no tiene ninguna limitación.

Espero que los desarrolladores de kernel (de cualquier sistema) hayan tomado algunas decisiones de diseño que añaden limitaciones.

1

No hay límites de longitud en stdin. Si no puede recibir grandes cantidades de datos, es su código el que crea los problemas.

+0

y cualquier VELOCIDAD de envío de límites de datos? – Rella

2

De acuerdo a todo el mundo de otra favorite Q&A site:

No debería haber un límite en el tamaño de la corriente (si esa es la entrada estándar u otro). Sin embargo, lo que tal vez quiera comprobar es dónde almacena estos caracteres ... ¿Hay espacio suficiente para almacenarlos todos?

intente Es un código como éste (sin almacenar!):

for (;;) { 
    int c = getc(stdin); 
    if (c == EOF) { break; } 
    putc(c, stdout); 
} 

y ver si tiene la misma restricción.

0

Existen límites en la velocidad de transferencia. En general, son aproximadamente los mismos que cualquier tubería "UNIX". La mayoría de los sistemas operativos ofrecen mecanismos más eficientes, pero las tuberías son bastante rápidas ... suponiendo que no esté utilizando printf &.

6

No. stdin no tiene límites de longitud o velocidad.

Si desea obtener gigabytes de datos a través de stdin puede, y su computadora lo proporcionará tan rápido como sea posible.

1

Práctica:

Los yes UNIX salidas de comando líneas de y sin fin. Conéctelo a un programa C que solo lea stdin y lo ponga en stdout (por ejemplo, cat, pero tr 'y' 'y' también funciona). Esperar hasta cat accidentes o su paciencia llega a su límite:

yes | cat 

Sobre el factor de velocidad, los límites no están determinadas por el lenguaje o sistema operativo, pero por el hardware (CPU, RAM, disco duro, SATA, red, ...)

+0

Realmente hay un comando para todo. –

+1

Se utiliza cuando otro comando necesita confirmación que no se puede deshabilitar (como un 'rm -i' codificado). – mouviciel