Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: puchi en 12 Diciembre 2016, 23:24 pm



Título: necesito informacion
Publicado por: puchi en 12 Diciembre 2016, 23:24 pm
Buenas tardes,

Como veréis me gusta bastante el lenguaje C, pero no consigo encontrar información y libros para programación C avanzado en español.

A lo máximo que he llegado con C es manejar ficheros y memorias,  y me gustaría a profundizar mucho más en C pero no se como.

Gracias, espero poder recibir ayuda.


Título: Re: necesito informacion
Publicado por: engel lex en 12 Diciembre 2016, 23:30 pm
primero que nada, te recomiendo migrar a C++ a menos que estés pensando hacer aplicaciones especificas, de todas formas si aprendes bien C++ y necesitas hacer algo en C, solo tienes que declarar las estructuras "a mano"

segundo... si, se que es un foro de habla hispana... pero sin aprender a leer inglés, estás limitado en el mundo de la informática... normalmente los papers importantes y muchos ensayos (de todo el mundo, incluyendo paises hispanohablantes) están en inglés por cosas de comodidad

ve si este te sirve

http://www.freelibros.org/programacion/el-lenguaje-de-programacion-c-plus-plus.html (http://www.freelibros.org/programacion/el-lenguaje-de-programacion-c-plus-plus.html)


Título: Re: necesito informacion
Publicado por: puchi en 12 Diciembre 2016, 23:36 pm
Básicamente lo que quiero aprender por ahora es utilizar C en lugar de los scripts de linux, por eso no sabia por donde empezar.
Ya que en muchos sitios me dicen emplea la función system();
Pero lo que realmente necesito es manejar el hardware del pc mediante C sin necesidad de embeber script dentro de C, no se si me explico.

Por otro lado y perdón por ser ignorante en el tema de C++, tengo entendido que se utiliza para programación orientada a objetos, pero realmente no entiendo la diferencia entre C y C++.
 


Título: Re: necesito informacion
Publicado por: engel lex en 12 Diciembre 2016, 23:44 pm
pero realmente no entiendo la diferencia entre C y C++.


ya lo dijiste... C++ soporta "objetos" que son estructuras complejas que facilitan muchisimo la vida, los objetos te "alejan" un poco de la ram y el manejo a mano de memoria, pero por la forma como se compilan, pueden dejar un codigo más eficiente... por otro lado trae muchas librerías que facilitan muchas tareas como manejo de strings


Citar
Pero lo que realmente necesito es manejar el hardware del pc mediante C

depende de que hardware, significa que lo que estás escribiendo es un driver y no es nada facil...

si estás usando system(), es porque estás usando tu programa para llamar a consola, para llamar a otro programa...

dame un ejemplo donde requieras system() para ver que estás haciendo


Título: Re: necesito informacion
Publicado por: MAFUS en 12 Diciembre 2016, 23:47 pm
Si vas a meterte a programar para Linux te recomiendo el libro The Linux Programming Interface.

C es solo una herramienta y hay que aprender otras técnicas para usarla bien. Este libro es bastante bueno: http://www.lcc.uma.es/~av/Libro/

Por otra parte C puede hacer muchas cosas que de primeras no cabría esperar. En inglés. Metaprogramación: http://www.chiark.greenend.org.uk/~sgtatham/mp/


Título: Re: necesito informacion
Publicado por: puchi en 12 Diciembre 2016, 23:52 pm
el ejemplo seria en el caso de querer encender o apagar el wifi del ordenador que si estubieramos en la consola de linux escribimos:

Código:
sudo ifconfig wlan0 up
si esto lo guardamos en un fichero.sh

Y entonces desde C podríamos ejecutar el siguiente código utilizando system("fichero.sh");

Entonces se plantea mi duda, es posible activar la tarjeta wireless sin utilizar código script, solo utilizando C.


Título: Re: necesito informacion
Publicado por: engel lex en 12 Diciembre 2016, 23:57 pm
te advierto... normalmente eso es mejor hacerlo por system para que el sistema operativo lo controle apropiadamente, sin embargo, casi todo loq ue está el linux es codigo libre, basta con buscar "source code of" y el programa (en este caso ifconfig)

aquí está ifconfig.c, así es por dentro
https://github.com/giftnuss/net-tools/blob/master/ifconfig.c (https://github.com/giftnuss/net-tools/blob/master/ifconfig.c)

si vas al nivel anterior verás la carpeta con las herramientas que usa el OS para manejar la red, junto con su makefile para compilar


Título: Re: necesito informacion
Publicado por: puchi en 13 Diciembre 2016, 00:03 am
Después de ver el código parece ser bastante complicado.
Tendré que aprender antes leyendo libros para poder adentrarme a tocar cosillas pequeñas del código de ifconfig.

Encontré este libro http://www.casadellibro.com/libro-unix-programacion-avanzada-3-ed/9788478976034/966894 (http://www.casadellibro.com/libro-unix-programacion-avanzada-3-ed/9788478976034/966894), pero no se si me servira para Linux ya que menciona UNIX.

Por curiosidad , desde system(); es posible recibir variables?
por si ejecuto un script y quiero que este me devuelva un valor como se recogería este desde C.


Título: Re: necesito informacion
Publicado por: Borito30 en 13 Diciembre 2016, 00:07 am
te advierto... normalmente eso es mejor hacerlo por system para que el sistema operativo lo controle apropiadamente, sin embargo, casi todo loq ue está el linux es codigo libre, basta con buscar "source code of" y el programa (en este caso ifconfig)

aquí está ifconfig.c, así es por dentro
https://github.com/giftnuss/net-tools/blob/master/ifconfig.c (https://github.com/giftnuss/net-tools/blob/master/ifconfig.c)

si vas al nivel anterior verás la carpeta con las herramientas que usa el OS para manejar la red, junto con su makefile para compilar

En este caso ifconfig esta compilado solamente en c puro? sin usar c++?


Título: Re: necesito informacion
Publicado por: engel lex en 13 Diciembre 2016, 00:09 am
si, linux a nivel e nucleo y en casi todas sus herramientas comunes está en C por razones de eficiencia y manejo optimo de la memoria... allí es que entra el poder de C


Título: Re: necesito informacion
Publicado por: puchi en 29 Diciembre 2016, 16:40 pm
Bueno después de un tiempo repasando conceptos de C  y buscando por google.
Encontré personas que dicen que la mejor manera de aprender un lenguaje de programación es leer códigos ajenos.

Pero no se donde sacar estos códigos y que sea de un nivel medio para empezar.

Las ganas para mi de aprender C son enormes  ;D.

Gracias


Título: Re: necesito informacion
Publicado por: MAFUS en 29 Diciembre 2016, 17:23 pm
Te diria que pasaas por the code project. Allí resolverás problemas, són juegos de programación,  y cuando hayas resuelto uno podrás ver la solución del resto de participantes.


Título: Re: necesito informacion
Publicado por: puchi en 29 Diciembre 2016, 17:30 pm
es esta pagina ?

Código:
https://www.codeproject.com/

Si es esa no he encontrado C a secas.


Título: Re: necesito informacion
Publicado por: MAFUS en 29 Diciembre 2016, 18:28 pm
Perdón,  culpa mia, es que los nombres se parecen y contesté rápido a través del móvil. Es codingame.com