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.
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)
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++.
Cita de: puchi en 12 Diciembre 2016, 23:36 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
CitarPero 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
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/
el ejemplo seria en el caso de querer encender o apagar el wifi del ordenador que si estubieramos en la consola de linux escribimos:
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.
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
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.
Cita de: 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
En este caso ifconfig esta compilado solamente en c puro? sin usar c++?
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
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
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.
es esta pagina ?
https://www.codeproject.com/
Si es esa no he encontrado C a secas.
Perdón, culpa mia, es que los nombres se parecen y contesté rápido a través del móvil. Es codingame.com