Вы не сможете сделать это легко, не обращаясь к более высокому уровню скриптового языка. Если бы я делал это, я бы использовал PHP и сделал что-то вроде
$values) {
$buffer = "";
$buffer .= $key.' ';
foreach(array_keys($values) as $v) {
buffer .= $v.' ';
}
$buffer .= "\n";
fwrite($outfile, $buffer);
}
fclose($infile);
fclose($outfile);
?>
-121--243229-
Это хороший вопрос, но есть много способов добраться до возможного решения (и я не знаю всех из них). Прежде всего, точная формулировка, которую вы ищете, это кернинг , который является регулировкой космоса между символами шрифта.
-121--111331-
Вы можете рассмотреть технологии esata или sas, которые могут быть лучше, чем форматы USB3 и USB c для больших переводов файлов.
Creo haber encontrado la respuesta a mi pregunta. He descargado el código fuente de gdm3 y he localizado dónde está configurado el socket para xdmcp.
static gboolean
open_port (GdmXdmcpDisplayFactory *factory)
{
struct sockaddr_storage serv_sa = { 0 };
g_debug ("GdmXdmcpDisplayFactory: Start up on host %s, port %d",
factory->priv->hostname ? factory->priv->hostname : "(null)",
factory->priv->port);
/* Open socket for communications */
#ifdef ENABLE_IPV6
factory->priv->socket_fd = do_bind (factory->priv->port, AF_INET6, &serv_sa);
if (factory->priv->socket_fd < 0)
#endif
factory->priv->socket_fd = do_bind (factory->priv->port, AF_INET, &serv_sa);
if G_UNLIKELY (factory->priv->socket_fd < 0) {
g_warning (_("Could not create socket!"));
return FALSE;
}
fd_set_close_on_exec (factory->priv->socket_fd);
if (factory->priv->use_multicast) {
setup_multicast (factory);
}
return TRUE;
}
Aquí se puede ver que si el paquete se creó para admitir IP6 y la operación de vinculación finaliza correctamente, el socket solo escuchará UDP6 y no UDP4.
La solución debe ser reconstruir el paquete sin el soporte de IP6, o modificar el código fuente para que se incluya un nuevo parámetro para habilitar/deshabilitar IP6 desde el archivo /etc/gdm3/daemon.conf
.
Se actualizó más información de los comentarios.
static int
create_socket (struct addrinfo *ai)
{
int sock;
sock = socket (ai->ai_family, ai->ai_socktype, ai->ai_protocol);
if (sock < 0) {
g_warning ("socket: %s", g_strerror (errno));
return sock;
}
#if defined(ENABLE_IPV6) && defined(IPV6_V6ONLY)
if (ai->ai_family == AF_INET6) {
int zero = 0;
if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, &zero, sizeof(zero)) < 0)
g_warning("setsockopt(IPV6_V6ONLY): %s", g_strerror(errno));
}
#endif
if (bind (sock, ai->ai_addr, ai->ai_addrlen) < 0) {
g_warning ("bind: %s", g_strerror (errno));
close (sock);
return -1;
}
return sock;
}
Y podemos ver lo siguiente en el sistema de archivos proc:
$ cat /proc/sys/net/ipv6/bindv6only
0
Por lo tanto, parece que no se realiza ningún enlace dual. Debería ser porque IPV6 _V6ONLY está definido.
Después de reconstruir el paquete sin soporte ip6:
udp 0 0 0.0.0.0:177 0.0.0.0:* -