Articles of glibc

¿Cómo se supone que se comportan los puntos de cancelación POSIX?

He estado observando la implementación de puntos de cancelación de glibc / nptl, y comparándola con POSIX, y, a menos que me equivoque, está completamente equivocado. El modelo básico utilizado es: int oldtype = LIBC_ASYNC_CANCEL(); /* switch to asynchronous cancellation mode */ int result = INLINE_SYSCALL(…); LIBC_CANCEL_RESET(oldtype); Según POSIX: Los efectos secundarios de actuar sobre […]

¿Cómo soluciono un error de “versión GLIBC_2.14 ‘no encontrado”?

He comstackdo un progtwig C en Ubuntu 12.04, construí un paquete Debian a partir de él y quiero instalarlo en un servidor que ejecuta Debian Lenny. La última vez que hice eso (hace unos dos meses) funcionó: pude instalar el paquete y ejecutar el binario. Pero ahora me sale el siguiente mensaje de error: (binary’s […]

Dado que el comité de la Norma C no estandarizó un reemplazo simple para get (), ¿qué debería ser?

La función gets se desaprobó por primera vez en C99 y finalmente se eliminó en C11. Sin embargo, no hay un reemplazo directo para ello en la biblioteca de C. fgets() no es un reemplazo directo porque no elimina el ‘\n’ final, que puede estar ausente al final del archivo. Muchos progtwigdores también se equivocan. […]

Undefine una macro similar a una función en C?

Estoy tratando de hacer algunos hacks sobre el glibc, y quería saber si es posible redefinir macros similares a funciones. Por ejemplo, tiene la siguiente macro: #define expm1(Val) __TGMATH_UNARY_REAL_ONLY (Val, expm1) Cómo redefinir expm1 como: #define expm1(Val) __TGMATH_UNARY_REAL_IMAG (Val, expm1, cexpm1) Supongo que tengo que cancelar la definición anterior pero no sé exactamente cómo hacerlo.

Obteniendo error al leer el archivo Unicode en C

Quiero leer un archivo Unicode en C (Cygwin / GCC) usando el siguiente código: #include #include #include void split_parse(char* text){ char** res = g_strsplit(text, “=”, 2); printf(“Key = %s : “, res[0]); printf(“Value = %s”, res[1]); printf(“\n”); } int main(int argc, char **argv) { setenv (“CYGWIN”, “nodosfilewarning”, 1); GIOChannel *channel; GError *err = NULL; int […]

¿Suprimiendo selectivamente las advertencias del enlace glibc?

glibc utiliza la siguiente “técnica” para generar advertencias de enlace … #define link_warning(symbol, msg) \ __make_section_unallocated (“.gnu.warning.” #symbol) \ static const char __evoke_link_warning_##symbol[] \ __attribute__ ((used, section (“.gnu.warning.” #symbol __sec_comment))) \ = msg; Para una advertencia de enlace particular generada por esto, ¿hay algún interruptor de línea de comando que se pueda pasar a ld […]

g_io_channel + socket = server, ¿solo obtienes un cliente? en lenguaje C

gente, aquí código ma: #include #include // gio channel #include //socket(); #include // structure #include // printf void deal(GIOChannel *in, GIOCondition condition, gpointer data) { struct sockaddr_storage income; int insock = g_io_channel_unix_get_fd(in); socklen_t income_len = sizeof(income); int newsock = accept(insock, (struct sockaddr*)&income, &income_len ); if(newsock == -1) { printf(“failure on newsock\n”); } char buff[128]; int […]

Usando rebobinar () en un ARCHIVO * abierto con fmemopen

Resuelto con glibc 2.24 – Ver ACTUALIZACIÓN a continuación Aquí hay un fragmento de código C (comstackdo con gcc 5.3.1, glibc 2.23): #include #include #include #include int main() { const char* s1=”Original content of file.\n” “still original content and some remaining original content.\n”; const char* s2=”overwriting data with new content\n”; const char* s3=”appended data\n”; const […]

Diseño de stack inicial de ELF x86-64 al llamar a glibc

Básicamente, leí partes de http://www.nasm.us/links/unix64abi y en la página 29, muestra la stack de procesos inicial de un progtwig en C. Mi pregunta es: estoy tratando de interactuar con glibc desde x86-64 nasm y en base a lo que se muestra arriba, argc debería estar en rsp. Entonces el siguiente código debería imprimir argc: [SECTION […]

¿Cómo usar __malloc_hook?

En el Manual de referencia de la biblioteca GNU C , hay un progtwig de ejemplo (p.65), pero no sé cuáles son las tres oraciones: __malloc_hook = old_malloc_hook; old_malloc_hook = __malloc_hook; __malloc_hook = my_malloc_hook; media. Especailly la segunda, ¿quién puede explicarme? Gracias. static void * my_malloc_hook (size_t size, const void *caller) { void *result; /* […]