elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Sobre mis conocimientos de C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Sobre mis conocimientos de C  (Leído 4,564 veces)
snake_linux

Desconectado Desconectado

Mensajes: 70


Ver Perfil
Sobre mis conocimientos de C
« en: 3 Septiembre 2015, 12:29 pm »

Hola a tod@s, como ya sabreis algunos, mi meta es saber varios lenguajes de programación, empecé con C, primero por que mucha gente dice que es la base y por que en general el lenguaje me gusta, es quisquilloso pero a la vez sencillo en cuanto a estructura.

El caso es que ya tengo algunos conocimientos interesantes en C, se lo básico sobre sockets, se también lo básico sobre hilos, crear arrays/matrices dinámicas con malloc, leer datos de un archivo con fgets, leer datos de teclado tanto con scanf como con fgets, la función rand(), memset(), malloc(), sizeof() los bucles que realmente son los mismos en todos los lenguajes, while, for, switch....manejar punteros, casting, estructuras, uniones, enumeraciones etc...

¿ Creeis que ya estoy más o menos preparado para el siguiente lenguaje ? es decir, que si ya podría decir que sé lo más importante de C para manejarme, ya se que esto se consigue sobre todo con la práctica, por lo que he creado también un pequeño proyecto que simula batallas pokemon en terminal, ya voy por la versión 1.1 y el programa, aunque es sencillo, es bastante grande, además uso una librería que hice para leer archivos de configuración.

Saludos.

PD: Esta pregunta va dirigida especialmente a ivancea96 ya que el ha respondido todas mis preguntas y ha podido ver mi avance.


« Última modificación: 4 Septiembre 2015, 11:37 am por snake_linux » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Sobre mis conocimientos de C
« Respuesta #1 en: 3 Septiembre 2015, 14:43 pm »

Cuando de verdad estés preparado, sabrás que puedes manejar el lenguaje que quieras, con solo mirar información sobre él, o tal vez algún ejemplo.

De todos modos, si C es tu primer lenguaje, está bien que mires hacia otros para distinguir entre <programar> y <programar C>. Tu meta es <programar>.

De todos modos, una forma muy simple de saber si sabes un lenguaje bien, es planteandote ertos. Ya no digo que crees los códigos, tan solo preguntarte si lo puedes hacer o no.
Por ejemplo:
-Si te digo que hagas un programa que lea de https://www.humblebundle.com/ y haga un listado de sus juegos en txt, ¿lo harías?
-Y si te digo que hagas un servidor o un cliente IRC, ¿lo conseguirías?

Tu mismo. Sé que C es un lenguaje algo complicado para hacer estas cosas desde 0. Se hace, pero lleva un buen rato. El problema es, ¿hay algo que desconozcas que te inhiba de hacer estas tareas? De ser así, ¿te costaría mucho adaptarte y conocerlo, rápido y eficientemente?

Este es mi examen. Hay muchas cosas, pero es difícil englobarlas todas. La capacidad de entenderlas y aplicarlas rápidamente es fundamental.

Comenta qué opinas.


En línea

snake_linux

Desconectado Desconectado

Mensajes: 70


Ver Perfil
Re: Sobre mis conocimientos de C
« Respuesta #2 en: 3 Septiembre 2015, 15:03 pm »

Lo conseguiría, pero tendría que buscar mucha info de como funciona un servidor/cliente irc y me llevaría varios dias, pero yo creo que lo conseguiría, de todas formas creo que para ese tipo de cosas otros lenguajes van mejor, por que facilitan más la vida que C puro y duro.
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Sobre mis conocimientos de C
« Respuesta #3 en: 3 Septiembre 2015, 15:41 pm »

Desde luego, hay lenguajes que te dan muchas cosas hechas. Pero hacer eso, un bot simple de IRC, es una buena práctica. Además, IRC es un protocolo sencillo, que se sigue utilizando.
Prueba.
En línea

snake_linux

Desconectado Desconectado

Mensajes: 70


Ver Perfil
Re: Sobre mis conocimientos de C
« Respuesta #4 en: 3 Septiembre 2015, 16:52 pm »

He estado investigando un poco como comunicarse con un servidor IRC (solo lo básico, conectarse a un canal y mandar un mensaje), y junto con varios códigos que he estado leyendo en internet, he conseguido armar un código que en teoría se conecta al irc y envia un mensaje de prueba, el caso es que lo he ejecutado, no da ningún error, hasta dice en mi terminal que se ha conectado, pero no veo que mande el mensaje ni se conecte el usuario del bot, dejo el código completo aquí:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <strings.h>
  5. #include <unistd.h>
  6. #include <sys/socket.h>
  7. #include <netinet/in.h>
  8. #include <arpa/inet.h>
  9. #include <netdb.h>  
  10.  
  11. int main(int argc, char *argv []) {
  12.  
  13.    int mysocket;
  14.    struct sockaddr_in server;
  15.    struct hostent *he;
  16.  
  17.    if ((he=gethostbyname(argv[1]))==NULL){      
  18.      /* llamada a gethostbyname() */
  19.      printf("gethostbyname() error\n");
  20.      exit(-1);
  21.   }
  22.  
  23.   if ((mysocket=socket(AF_INET, SOCK_STREAM, 0))==-1){  
  24.      /* llamada a socket() */
  25.      printf("socket() error\n");
  26.      exit(-1);
  27.   }
  28.  
  29.    server.sin_family = AF_INET;
  30.   server.sin_port = htons(6667);
  31.   /* htons() es necesaria nuevamente ;-o */
  32.   server.sin_addr = *((struct in_addr *)he->h_addr);  
  33.   /*he->h_addr pasa la información de ``*he'' a "h_addr" */
  34.   bzero(&(server.sin_zero),8);
  35.  
  36.   if(connect(mysocket, (struct sockaddr *)&server,
  37.      sizeof(struct sockaddr))==-1){
  38.      /* llamada a connect() */
  39.      printf("connect() error\n");
  40.      exit(-1);
  41.   }
  42.   printf("conexion establecida\n");
  43.    send(mysocket,"NICK Snake\r\n",strlen("NICK Snake\r\n"),0);
  44.    send(mysocket,"USER Snake\r\n",strlen("USER Snake\r\n"),0);
  45.    send(mysocket,"JOIN #amor\r\n",strlen("JOIN #amor\r\n"),0);
  46. send(mysocket,"PRIVMSG #amor :Hello world!\r\n",strlen("PRIVMSG #amor :Hello world!\r\n"),0);
  47. close(mysocket);
  48.  
  49.  
  50. }

offtopic: He estado viendo como se usan los sockets en Python y no tiene comparación... en C me resulta muy dificil comprenderlo.
« Última modificación: 3 Septiembre 2015, 16:54 pm por snake_linux » En línea

kondrag_X1

Desconectado Desconectado

Mensajes: 157


Ver Perfil
Re: Sobre mis conocimientos de C
« Respuesta #5 en: 3 Septiembre 2015, 17:51 pm »

lo malo de un lenguaje es que lo vas olvidando si no lo practicas. Hablo desde la experiencia así que si vas a tocar otros lenguajes hazte pequeñas chorradas en C para que no se te olvide. Es mi consejo un saludo.
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Sobre mis conocimientos de C
« Respuesta #6 en: 3 Septiembre 2015, 20:26 pm »

El comando USER es incorrecto.
Citar
USER username hostname servername :realname
Así es.
En línea

snake_linux

Desconectado Desconectado

Mensajes: 70


Ver Perfil
Re: Sobre mis conocimientos de C
« Respuesta #7 en: 4 Septiembre 2015, 00:44 am »

El comando USER es incorrecto.Así es.

No es el programa en C, es el server por que he modificado un .py que encontré en internet, muy sencillo, y el recv me da lo siguiente:

Código:
:ariel.chathispano.com NOTICE IP_LOOKUP :*** Found your hostname (CACHED!).

El código python que he usado es:

Código
  1. import socket
  2. import string
  3.  
  4. HOST="irc.irc-hispano.org"
  5. PORT=6667
  6. NICK="Snake"
  7. IDENT="Snake"
  8. REALNAME="Snake"
  9. CHAN="#amor"
  10. readbuffer=""
  11. s=socket.socket( )
  12. s.connect((HOST, PORT))
  13. s.send("NICK %s\r\n" % NICK)
  14. s.send("USER %s %s :%s\r\n" % (IDENT, HOST, REALNAME))
  15. s.send("JOIN :%s\r\n" % CHAN)
  16. s.send("PRIVMSG %s hola!\n" % CHAN)
  17. print s.recv(1000000)
« Última modificación: 4 Septiembre 2015, 00:46 am por snake_linux » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Sobre mis conocimientos de C
« Respuesta #8 en: 4 Septiembre 2015, 11:17 am »

offtopic: He estado viendo como se usan los sockets en Python y no tiene comparación... en C me resulta muy dificil comprenderlo.

En C, lo mejor es que te hagas una pequeña librería de funciones para manejarlo fácilmente.

En Python, en NodeJS, en PHP, en .NET, en Java, en la mayoría de lenguajes interpretados, un socket se hace en dos lineas. La librería estandar de C no trae sockets. En C lidias con el sistema operativo, lo que hace que tengas que hacer las cosas paso a paso. De todos modos, si bien es más tedioso, intenta comprenderlo, y verás que no es complejo.
Usando las API de los sistemas operativos, todo se hace paso a paso.
En línea

snake_linux

Desconectado Desconectado

Mensajes: 70


Ver Perfil
Re: Sobre mis conocimientos de C
« Respuesta #9 en: 4 Septiembre 2015, 11:33 am »

En C, lo mejor es que te hagas una pequeña librería de funciones para manejarlo fácilmente.

En Python, en NodeJS, en PHP, en .NET, en Java, en la mayoría de lenguajes interpretados, un socket se hace en dos lineas. La librería estandar de C no trae sockets. En C lidias con el sistema operativo, lo que hace que tengas que hacer las cosas paso a paso. De todos modos, si bien es más tedioso, intenta comprenderlo, y verás que no es complejo.
Usando las API de los sistemas operativos, todo se hace paso a paso.

Creo que lo mejor es que use otro lenguaje para sockets, ya que entender los sockets en C ya lo he entendido, pero no son muy "prácticos" a no ser que te hagas una librería como bien dices.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines