¿Cómo imprimirá cualquier carácter, cadena o valor de una variable sin funciones de biblioteca en C?
Pregunta
Si, por ejemplo, no debo usar funciones de biblioteca estándar como printf, putchar, ¿cómo puedo imprimir un personaje en la pantalla fácilmente? ¿Hay alguna manera fácil de hacerlo? No sé mucho sobre las llamadas al sistema y si tengo que usarlas, ¿cómo?
Entonces, ¿alguien puede aconsejar una manera fácil de imprimir sin usar las funciones de la biblioteca?
Solución 3
Bueno, gracias a todos por sus respuestas. Encontré una respuesta simple con un comentario del Sr. Hao debajo de la pregunta. su respuesta es un programa simple como este
Turbo C (programa DOS):
char far* src = (char far*) 0xB8000000L;
*src = 'M';
src += 2;
*src = 'D';
o intente esto: http://en.wikipedia.org/wiki/Brainfuck :) & # 8211; // Hao (hace una hora)
Lo probé en Turbo C y está funcionando. Quería una solución simple como esta y quería aceptarla como respuesta correcta, pero él (Hao) la dio como comentario, así que la pegué aquí para que otros usuarios la conocieran en su nombre y la acepté. Una vez más, gracias Sr.Hao.
Otros consejos
En el estándar C, no puedes. La única E / S definida en C es a través de las funciones de biblioteca estándar de C.
En una plataforma determinada, puede haber formas de hacerlo:
- Hacer llamadas al kernel directamente. Probablemente necesitará escribir un ensamblaje en línea para hacer esto. Puede realizar la llamada
write
de litb directamente, sin usar su biblioteca C. Tome la fuente de su biblioteca C para ver cómo se hace. - Escribir directamente en el búfer de trama. Los sistemas operativos multiusuario a menudo no permiten esto (al menos sin hacer llamadas a la biblioteca / kernel).
A menos que esté escribiendo su propia biblioteca C, no estoy seguro de por qué querría hacer esto.
En Linux, puede usar la llamada al sistema write
:
write(1, "hello\n", 6); // write hello\n to stdout
Si no puede obtener suficiente, puede ir un paso más abajo, invocando la llamada al sistema genéricamente:
syscall(__NR_write, 1, "hello\n", 6);
Vale la pena saber sobre strace
, que puede usar para ver qué syscalls son utilizadas por cualquier programa en particular mientras se ejecuta. Pero tenga en cuenta que para "un analizador simple", apenas es necesario usar llamadas de sistema sin procesar. Mejor usar las funciones de la biblioteca c.
Por cierto, busque las funciones WriteFile y GetStdHandle si desea hacer lo anterior en Windows sin usar la biblioteca estándar c. Sin embargo, no será tan l33t como la solución de Linux.