Autor
|
Tema: Sobre mis conocimientos de C (Leído 5,069 veces)
|
snake_linux
Desconectado
Mensajes: 70
|
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
Mensajes: 3.412
ASMático
|
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
Mensajes: 70
|
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
Mensajes: 3.412
ASMático
|
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
Mensajes: 70
|
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í: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> int main(int argc, char *argv []) { int mysocket; struct sockaddr_in server; struct hostent *he; if ((he=gethostbyname(argv[1]))==NULL){ /* llamada a gethostbyname() */ printf("gethostbyname() error\n"); } if ((mysocket=socket(AF_INET, SOCK_STREAM, 0))==-1){ /* llamada a socket() */ } server.sin_family = AF_INET; server.sin_port = htons(6667); /* htons() es necesaria nuevamente ;-o */ server.sin_addr = *((struct in_addr *)he->h_addr); /*he->h_addr pasa la información de ``*he'' a "h_addr" */ bzero(&(server.sin_zero),8); if(connect(mysocket, (struct sockaddr *)&server, sizeof(struct sockaddr))==-1){ /* llamada a connect() */ } printf("conexion establecida\n"); send (mysocket ,"NICK Snake\r\n",strlen("NICK Snake\r\n"),0); send (mysocket ,"USER Snake\r\n",strlen("USER Snake\r\n"),0); send (mysocket ,"JOIN #amor\r\n",strlen("JOIN #amor\r\n"),0); send (mysocket ,"PRIVMSG #amor :Hello world!\r\n",strlen("PRIVMSG #amor :Hello world!\r\n"),0);close(mysocket); }
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
Mensajes: 157
|
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
Mensajes: 3.412
ASMático
|
El comando USER es incorrecto. USER username hostname servername :realname Así es.
|
|
|
En línea
|
|
|
|
snake_linux
Desconectado
Mensajes: 70
|
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: :ariel.chathispano.com NOTICE IP_LOOKUP :*** Found your hostname (CACHED!).
El código python que he usado es: import socket import string HOST="irc.irc-hispano.org" PORT=6667 NICK="Snake" IDENT="Snake" REALNAME="Snake" CHAN="#amor" readbuffer="" s=socket.socket( ) s.connect((HOST, PORT)) s.send("NICK %s\r\n" % NICK) s.send("USER %s %s :%s\r\n" % (IDENT, HOST, REALNAME)) s.send("JOIN :%s\r\n" % CHAN) s.send("PRIVMSG %s hola!\n" % CHAN) print s.recv(1000000)
|
|
« Última modificación: 4 Septiembre 2015, 00:46 am por snake_linux »
|
En línea
|
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
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
Mensajes: 70
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
como medir mis conocimientos sobre algun lenguaje ?¿
Programación General
|
linux1
|
4
|
6,671
|
4 Julio 2010, 00:11 am
por @synthesize
|
|
|
¿Algun buen libro para afianzar y ampliar conocimientos sobre C++?
Programación C/C++
|
SCUMM
|
4
|
2,995
|
7 Febrero 2014, 03:28 am
por Yoel Alejandro
|
|
|
Alguien tiene conocimientos sobre Apex protect avital (proteccion antihack)
Ingeniería Inversa
|
holamundo_01
|
1
|
2,009
|
30 Septiembre 2015, 04:15 am
por MCKSys Argentina
|
|
|
¿Alguien con conocimientos sobre globus toolkit?
Software
|
tutululu
|
0
|
1,516
|
7 Octubre 2018, 18:10 pm
por tutululu
|
|
|
Ayuda con conocimientos sobre C++
Programación C/C++
|
jeremias butassi
|
2
|
1,709
|
3 Febrero 2019, 03:42 am
por jeremias butassi
|
|