Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: patilanz en 19 Febrero 2014, 22:54 pm



Título: Hacer cosas sin librerias
Publicado por: patilanz en 19 Febrero 2014, 22:54 pm
Hola estoy estudiando c++ con un libro pero siempre te dicen que tienes que utilizar por ejemplo para obtener flujo por el teclado tienes que utilizar la librería iostream
Pero yo quiero saber hacer lo sin utilizar ninguna librería. Osea conectarme con el teclado y esperar a que el usuario introduzca teclas o conectar me con la pantalla y imprimir algo.

Como hacer esto?

Saludos


Título: Re: Hacer cosas sin librerias
Publicado por: rir3760 en 20 Febrero 2014, 02:42 am
estoy estudiando c++ con un libro pero siempre te dicen que tienes que utilizar por ejemplo para obtener flujo por el teclado tienes que utilizar la librería iostream
Ello porque la biblioteca estándar de C++ esta garantizada en aplicaciones que se ejecutan sobre un anfitrión (el SO).

Pero yo quiero saber hacer lo sin utilizar ninguna librería. Osea conectarme con el teclado y esperar a que el usuario introduzca teclas o conectar me con la pantalla y imprimir algo.
Un SO moderno (por ejemplo MS Windows) no te permite acceder directamente a recursos como el hardware[1], en su lugar utilizas su API, siguiendo el ejemplo si deseas utilizar la Win32 API para aplicaciones de consola la referencia del fabricante se encuentra a partir de la pagina Consoles (http://msdn.microsoft.com/en-us/library/ms682010.aspx).

Para lo que deseas debes utilizar un SO como MS-DOS o bien, en el caso de MS Windows, [1]Getting started with drivers (http://msdn.microsoft.com/en-us/library/windows/hardware/ff554690%28v=vs.85%29.aspx).

Un saludo


Título: Re: Hacer cosas sin librerias
Publicado por: patilanz en 20 Febrero 2014, 07:48 am
Hola ppr lo que he entendido todo se realiza con librerías del sistema operativo o estándares ? Si quiero reproducir un sonido que se conecta con los drives de sonido no puedo sin usar una api?
Pero si es asi entonces si quiero hacer un drive que tambien es un programa o no?

Saludos


Título: Re: Hacer cosas sin librerias
Publicado por: engel lex en 20 Febrero 2014, 08:43 am
Citar
Hola ppr lo que he entendido todo se realiza con librerías del sistema operativo o estándares ? Si quiero reproducir un sonido que se conecta con los drives de sonido no puedo sin usar una api?

las standares enlazan las de sistema para su uso...

Citar
Pero si es asi entonces si quiero hacer un drive que tambien es un programa o no?
driver*

también es un programa, algo más complejo y que tienes que tomar en cuenta que depende de la tarjeta de sonido independientemente (es decir posiblemente si la usas en otra pc no sirva), solo por nombrar uno de cientos de problemas que te dará...


Título: Re: Hacer cosas sin librerias
Publicado por: eferion en 20 Febrero 2014, 09:03 am
Hola ppr lo que he entendido todo se realiza con librerías del sistema operativo o estándares ? Si quiero reproducir un sonido que se conecta con los drives de sonido no puedo sin usar una api?

Hay mecanismos para comunicarse directamente con los drivers... lo que sucede es que si bajas a ese nivel te encontrarás con el problema de que tus aplicaciones no van a funcionar en equipos diferentes al tuyo.

La razón es que los drivers son algo que está muy cercano al hardware y, por tanto, es muy dependiente del mismo. Quiero decir, si cambia el hardware cambian los drivers... y si tú en tu programa no añades la compatibilidad necesaria para detectar, reconocer y utilizar al menos los drivers más comunes del mercado tu aplicación no servirá para mucho.

El sistema software de un equipo se estructura en capas. Las capas más bajas y más cercanas al hardware son altamente dependientes del mismo... la finalidad de las capas más altas es proporcionar un entorno independiente y aislado a través del cual sabes que tu código siempre va a funcionar, independientemente de lo que haya por debajo.

PD.: no vas a aprender más por programar a bajo nivel, son cosas distintas y cada una tiene su lugar y sus usos.


Título: Re:
Publicado por: ivancea96 en 20 Febrero 2014, 10:39 am
Si buscas bajo nivel, te diría ensamblador. Pero hasta ensamblador, usa api de windows y otras.

Enviado desde mi ST21i mediante Tapatalk


Título: Re: Hacer cosas sin librerias
Publicado por: Gh057 en 20 Febrero 2014, 11:54 am
Hola patilanz, basícamente la programación es modular, es basa en "divide y vencerás" sea mediante estructuras o funciones, o hasta en el paradigma del POO el código se divide en diferentes partes, formando nuestra solución al problema planteado, según el algoritmo implementado.

El origen y la parte de más bajo nivel es el lenguaje máquina, luego el ensamblador como comúnmente se conoce; pero hasta él tienes diferentes sentencias ya definidas para poder operar... mas en todos los conocidos como lenguaje de medio o alto nivel (porque son más entendibles al humano, no por facilidad o dificultad de implementarlo) tienes funciones implementadas en bibliotecas (verdadera traducción a "library") para utilizar o bien crear las tuyas propias... con ello no solo resuelvas más rápidamente el prolema sino que puedes reutilizar código, ganas tiempo y es más fácil luego mejorar y depurar la aplicación.

Puedes irte creando tus propias funciones, entiéndase implementar algoritmos propios o ya definidos; pero en un futuro entenderás que no sirve "reinventar la rueda" y el usar métodos o funciones desde bibliotecas te permitirá hacer aplicaciones de mejor calidad. Saludos!


Título: Re: Hacer cosas sin librerias
Publicado por: patilanz en 22 Febrero 2014, 10:57 am
Hola gracias por sus respuestas ya me ha quedado mas claro. Voy a intentar bajar a un nivel mas bajo para conocer los drivers y lo demás. Pero voy a utilizar las librerías ya existentes aunque siempre quiero conocer como funcionan por dentro ya que en la mayoría de los libros o tutoriales te dice que no se necesario pero yo creo que asi se aprende mucho mas ya que si no sabes como funcionan nunca aprenderás a crear tus propias librerías mas complejas.

Y otra cosa si quieres editar un programa ya existente o crear un exploit para el tendrás que conocer las cosas mas a fondo osea ensamblador y el lenguaje maquina supongo. O por ejemplo cuando creas un programa que necesita utilizar un hardware creado por mi mismo que se conecta por usb necesitas crear tus drivers y todo.

Muchas gracias


Título: Re: Hacer cosas sin librerias
Publicado por: amchacon en 22 Febrero 2014, 12:04 pm
Hola gracias por sus respuestas ya me ha quedado mas claro. Voy a intentar bajar a un nivel mas bajo para conocer los drivers y lo demás. Pero voy a utilizar las librerías ya existentes aunque siempre quiero conocer como funcionan por dentro ya que en la mayoría de los libros o tutoriales te dice que no se necesario pero yo creo que asi se aprende mucho mas ya que si no sabes como funcionan nunca aprenderás a crear tus propias librerías mas complejas.
En la librería estándar hay muchas cosas que puedes intentar implementar sin necesidad de meterte en el tema de hardware o APIS.

En C++ puedes intentar recrear las STL (vector,list,map...).

ya que si no sabes como funcionan nunca aprenderás a crear tus propias librerías mas complejas.
Pues te equivocas completamente, no hay ninguna necesidad de saber como se implementan las librerías estándares (sobre todo las que van vía hardware). Tan solo tienes que aprender que hacen y como funcionan.

Es un paradigma que se llama "encapsulamiento".


Título: Re: Hacer cosas sin librerias
Publicado por: patilanz en 22 Febrero 2014, 22:09 pm
Bueno si creo que tienes razón pero si tendrás que entrar en APIS ya que por ejemplo para cambiar el fondo de escritorio de windows no creo que exista una librería para esto o cosas así de los sistemas operativos no comunes.

Saludos


Título: Re: Hacer cosas sin librerias
Publicado por: engel lex en 22 Febrero 2014, 22:39 pm
para cambiar el fondo de escritorio hay cosas así, que son parte de los api...

Código
  1. SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, test, SPIF_UPDATEINIFILE);

en so no standar, puedes hacer lo que hacia el tune up para cambiar las barras de inicio y eso, que era inyectar las librerías dinámicas que generaban esos gráficos, para modificarlos


Título: Re: Hacer cosas sin librerias
Publicado por: vangodp en 22 Febrero 2014, 23:43 pm
¿Patilanz una pregunta?¿Cuantos años tienes?  :laugh:


Título: Re: Hacer cosas sin librerias
Publicado por: patilanz en 23 Febrero 2014, 00:27 am
Lo del fondo de escritorio era solo un ejemplo  ;D
Gracias de todas formas.

vangodp porque te interesan mis anos ?  :huh:


Título: Re: Hacer cosas sin librerias
Publicado por: rir3760 en 23 Febrero 2014, 02:37 am
Voy a intentar bajar a un nivel mas bajo para conocer los drivers y lo demás. Pero voy a utilizar las librerías ya existentes aunque siempre quiero conocer como funcionan por dentro ya que en la mayoría de los libros o tutoriales te dice que no se necesario pero yo creo que asi se aprende mucho mas ya que si no sabes como funcionan nunca aprenderás a crear tus propias librerías mas complejas.
Tienes que ir paso a paso, voy a citar el primer párrafo de la guía que mencione:
Citar
Getting started with drivers

Start here to learn fundamental concepts about drivers.

You should already be familiar with the C programming language, and you should understand the ideas of function pointers, callback functions, and event handlers. If you are going to write a driver based on User-Mode Driver Framework 1.x, you should be familiar with C++ and COM.

Primero aprendes un lenguaje como C o C++ utilizando solo su biblioteca estándar ya que es la forma mas fácil (debido a que el numero de variables es el mínimo). Esto siendo optimistas te lleva un año o dos. Solo después de eso te enfocas en extensiones como el API de un SO, bibliotecas de terceros, etc.

Ya por ultimo y sin animo de fastidiar: "bajar a un nivel mas bajo" es un Pleonasmo (http://es.wikipedia.org/wiki/Pleonasmo).

Un saludo


Título: Re: Hacer cosas sin librerias
Publicado por: patilanz en 23 Febrero 2014, 10:50 am
Muchas gracias a todos ya me quedo mucho mas claro.


Título: Re: Hacer cosas sin librerias
Publicado por: amchacon en 23 Febrero 2014, 15:13 pm
Bueno si creo que tienes razón pero si tendrás que entrar en APIS ya que por ejemplo para cambiar el fondo de escritorio de windows no creo que exista una librería para esto o cosas así de los sistemas operativos no comunes.

Saludos
Pero esque me estás mezclando churras con meninas.

Para cambiar el fondo del escritorio necesitas la API sí o sí, pero para escribir en la pantalla no porque puedes tirar de la librería estándar. Son ganas de reinventar la rueda.


Título: Re: Hacer cosas sin librerias
Publicado por: engel lex en 24 Febrero 2014, 22:32 pm
no creo que sean ganas de reinventar la rueda... es ganas de entender como está hecha... considero este post legitima curiosidad


Título: Re: Hacer cosas sin librerias
Publicado por: patilanz en 24 Febrero 2014, 23:21 pm
Empece este post porque tenia ganas de aprender algo mas. Hay personas que con saber como crear algo ya les basta sin entender como funciona en realidad o otras que necesitan saber todo a fondo. Yo soy de los segundos y por esto pregunto tanto.

Es simplemente por curiosidad como lo dijo engelx


Título: Re: Hacer cosas sin librerias
Publicado por: engel lex en 25 Febrero 2014, 06:17 am
es un dilema ingenieria-ciencia que vi mucho cuando estaba en la uni...

el ingeniero sabe como aplicarlo y como le sirve, pero no le importa que hace ni como
el cientifico sabe que hace y como, más no le importa como lo usarán ni de que sirve


Título: Re: Hacer cosas sin librerias
Publicado por: amchacon en 25 Febrero 2014, 12:47 pm
Empece este post porque tenia ganas de aprender algo mas. Hay personas que con saber como crear algo ya les basta sin entender como funciona en realidad o otras que necesitan saber todo a fondo. Yo soy de los segundos y por esto pregunto tanto.

Es simplemente por curiosidad como lo dijo engelx
Y me parece perfecto, te hará más sabio pero no mejor programador. Además en tus proyectos (siempre que puedas) tendrás que usar las librerías estándares (por compatibilidad y porque la otra gente lo entiende mejor).

A mí conocer como funciona un circuito sumador en un procesador no me ha hecho mejor programador.

PD: Lo que si te puede ayudar es implementar las estructuras abstractas del lenguaje (vectores, listas, pilas, colas...). Es un problema bastante bueno para aprender, además te ayudará a conocer esas estructuras mejor.

Evidentemente, es solo para fines academicos, después en tu proyectos deberías usar las estructuras que te proporciona la librería estándar del lenguaje.


Título: Re: Hacer cosas sin librerias
Publicado por: ivancea96 en 25 Febrero 2014, 15:20 pm
A parte de las críticas, no vi respuesta a la pregunta inicial.

Quizás puedas indagar algo por aquí (http://www.libelium.com/api/waspmote/files.html).
Aquí mejor: LibstdC++ (http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/iostream.html)
Son sources de varias librerías, usadas en C y C++. No se hasta que punto es eso fiable, no conozco la página :o pero parece estar bien.


Título: Re: Hacer cosas sin librerias
Publicado por: patilanz en 25 Febrero 2014, 21:21 pm
amchacon pero cualquier conocimiento no te viene mal igual te sirve de algo aunque no sea muy importante algún día te puede servir.

ivancea96 gracias se ve interesante