Si en nuestra aplicación utilizamos una base de datos SQLite pero no estamos muy familiarizamos con la forma de trabajar de este pequeño motor, esta es tu guía. Aunque SQL es el mismo para muchas bases de datos (sobre todo las que tienen estas tres letras en su nombre: MSSQL, MySQL, PostgreSQL…), siempre hay unas pequeñas diferencias.
Esto no es una guía completa de SQLite, sólo una pequeña chuleta para algunas tareas comunes que pueden traernos de cabeza.… Leer artículo completo
Callbacks en C++11, llamando a métodos con un objeto asociado (II)
Hace dos semanas hablábamos de Callbacks en C++11 nuevas posibilidades para un software más potente . Empezamos con una pequeña introducción para «almacenar» una función en una variable o un argumento de función y llamarla desde ahí, incluso introdujimos las funciones anónimas o lambdas.
Ahora, como no podía ser de otra forma, y dado que estamos en un lenguaje orientado a objetos, en el que queremos aprovechar todo su potencial. Vamos a hacer varios ejemplos en los que llamaremos a métodos de una clase de varias formas diferentes.… Leer artículo completo
Pintar una gráfica con gnuplot de datos extraidos de SQLite
Como parte de uno de mis últimos proyectos, recopilo datos periódicamente y los almaceno en una tabla SQLite. Pero, al final, los datos no valen para nada si no somos capaces de tener una visión global de lo que ha pasado a lo largo del periodo de tiempo. Y para eso, ¿qué mejor que pintar los datos en una gráfica?
Ya que los datos los almaceno en SQLite, utilizaré el cliente sqlite3 y para pintar las gráficas, gnuplot.… Leer artículo completo
MySQL: Rellenar campos de fecha de creación y modificación con la fecha actual automáticamente
Es muy útil, al crear una tabla cuyos datos pueden ser modificados con cierta frecuencia, añadir campos que especifiquen el momento de creación y el de modificación. Por ejemplo, creamos la siguiente tabla de configuración para una aplicación:
1
2
3
4
5
6
7
8
9
10El objetivo es que cuando creemos un nuevo valor, éste rellene automáticamente las fechas de creación y modificación a la fecha actual.… Leer artículo completo
Obtener la fecha y hora formateada en C
Es un código muy simple, aunque tal vez si estáis empezando os resulte muy útil para que vuestros programas sean capaces de decir la hora o hacer alguna operación con la fecha
1
2
3
4
5
6
7
8
9
10
11
12
13
14La forma de utilizar strftime() es pasando los siguientes parámetros:
- Un array de char o char* donde almacenaremos la cadena de caracteres resultante
- El tamaño máximo de caracteres que podemos ocupar, es decir, el tamaño reservado para la variable anterior
- El formato en el que queremos presentar los datos, con algunas palabras clave que indicarán dónde va cada uno de los datos, los más importantes son:
- %s : Número de segundos desde la época: 1 de Enero del 1970 a las 00:00
- %d : Día del mes (del 01 al 31)
- %m : Mes (del 01 al 12)
- %Y : Año (con 4 cifras.
Algoritmos: Año bisiesto y validación de fechas en C
Para inaugurar la nueva sección de Algoritmos de este blog, empezaré presentando una función para calcular años bisiestos (lo podemos encontrar en Wikipedia en bastantes más lenguajes, pero, ¿por qué aquí no?
1
2
3
4function bisiesto(int year)
{
return (a%4==0) && ( (a%100!=0) || (a%400==0) );
}Es decir, cada 4 años hay un año bisiesto, no cuando el año es múltiplo de 100, aunque sí cuando es múltiplo de 400.… Leer artículo completo
Creando un servidor que acepte múltiples clientes simultáneos en C
Para hacer una prueba de esto, crearemos un servidor al que nos podremos conectar por telnet y pedir cierta información a través de comandos. El ejemplo soporta los siguientes comandos (en mayúsculas):
- DATE: Pide la fecha al servidor
- TIME: Pide la hora al servidor
- HOLA: Saluda y me dice mi IP
- EXIT: Cierra el cliente actual
- CERRAR: Cierra el servidor.
- Cualquier otra cosa se manda repetida (ECHO)
… Leer artículo completo1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267/**
*************************************************************
* @file servtcp.c
* @brief Breve descripción
* Ejemplo de un cliente TCP usando threads
*
*
* @author Gaspar Fernández <blakeyed@totaki.com>
* @version 0.1Beta
* @date 13 ene 2011
* Historial de cambios:
* 20110113 - Versión inicial
*
*
*************************************************************/
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <netinet/in.h>
#include <resolv.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <pthread.h>
#include <string.h>
/** Puerto */
#define PORT 7000
/** Número máximo de hijos */
#define MAX_CHILDS 3
/** Longitud del buffer */
#define BUFFERSIZE 512
int AtiendeCliente(int socket, struct sockaddr_in addr);
int DemasiadosClientes(int socket, struct sockaddr_in addr);
void error(int code, char *err);
void reloj(int loop);
int main(int argv, char** argc){
int socket_host;
struct sockaddr_in client_addr;
struct sockaddr_in my_addr;
struct timeval tv; /* Para el timeout del accept */
socklen_t size_addr = 0;
int socket_client;
fd_set rfds; /* Conjunto de descriptores a vigilar */
int childcount=0;
int exitcode;
int childpid;
int pidstatus;
int activated=1;
int loop=0;
socket_host = socket(AF_INET, SOCK_STREAM, 0);
if(socket_host == -1)
error(1, "No puedo inicializar el socket");
my_addr.
Últimos comentarios