Svobodný citační manažer Zotero (Wikipedie, GitHub) byl vydán v nové major verzi 8. Přehled novinek v příspěvku na blogu.
Byla vydána verze 1.93.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
Svobodný operační systém ReactOS (Wikipedie), jehož cílem je kompletní binární kompatibilita s aplikacemi a ovladači pro Windows, slaví 30. narozeniny.
Společnost Raspberry Pi má nově v nabídce flash disky Raspberry Pi Flash Drive: 128 GB za 30 dolarů a 256 GB za 55 dolarů.
Technologie Skip pro multiplatformní mobilní vývoj, která umožňuje vývojářům vytvářet iOS a Android aplikace z jediné Swift a SwiftUI kódové základny, se s vydáním verze 1.7 stala open source.
Na GitHubu byl zveřejněn algoritmus "Pro vás" sociální sítě 𝕏.
Byla vydána nová major verze 34.0.0 webového prohlížeče Pale Moon (Wikipedie) vycházejícího z Firefoxu. Přehled novinek v poznámkách k vydání.
Win8DE je desktopové prostředí pro Wayland, inspirované nechvalně proslulým uživatelským rozhraním Metro z Windows 8. Nabízí dlaždicové rozhraní s velkými tlačítky a jednoduchou navigací, optimalizované pro dotyková zařízení. Cílem projektu je přetvořit design operačního systému Windows 8 do funkčního a minimalistického rozhraní vhodného pro každodenní použití na Linuxu.
Laboratoře CZ.NIC vydaly Datovku 4.28.0 a Mobilní Datovku 2.6.0. Hlavní novinkou je ukládání rozpracovaných datových zpráv do konceptů. Datovka je svobodné multiplatformní aplikace pro přístup k datovým schránkám a k trvalému uchovávání datových zpráv v lokální databázi.
Unix Pipe Game je vzdělávací karetní hra zaměřená na děti a rodiče, která děti učí používat unixové příkazy prostřednictvím interaktivních úkolů. Klíčovým prvkem hry je využití symbolu | pro pipeline neboli 'rouru', který umožňuje propojit výstupy a vstupy jednotlivých unixových příkazů, v tomto případě vytištěných na kartičkách. Předpokládá se, že rodič má alespoň nějaké povědomí o unixových příkazech a jejich provazování pomocí |.
… více »
#include < sys/socket.h >
#include < netinet/in.h >
#include < arpa/inet.h >
#include < stdio.h >
#include < stdlib.h >
int main(int argc, char *argv[])
{
struct in_addr addr;
unsigned char buf[sizeof(struct in6_addr)];
char str[INET6_ADDRSTRLEN];
if (argc<2)
{
fprintf(stderr, "IPv4 address required as an argument.\n");
exit(EXIT_FAILURE);
}
if (inet_aton(argv[1], &addr) == 0)
{
perror("inet_aton");
exit(EXIT_FAILURE);
}
if (inet_pton(AF_INET, argv[1], buf) != 1)
{
perror("inet_pton");
exit(EXIT_FAILURE);
}
if (inet_ntop(AF_INET6, buf, str, INET6_ADDRSTRLEN)==NULL)
{
perror("inet_ntop");
exit(EXIT_FAILURE);
}
printf("%s\n", str);
exit(EXIT_SUCCESS);
}
Řešení dotazu:
#define _GNU_SOURCE
#include < string.h>
#include < sys/socket.h>
#include < netinet/in.h>
#include < arpa/inet.h>
#include < stdio.h>
#include < stdlib.h>
#define IPV6_ADDRESS_SIZE sizeof(struct in6_addr)
int main(int argc, char *argv[])
{
struct in_addr addr;
unsigned char buf_v4[sizeof(struct in_addr)];
unsigned char buf_v6[IPV6_ADDRESS_SIZE] = {0};
unsigned char str[INET6_ADDRSTRLEN];
if (argc<2)
{
fprintf(stderr, "IPv4 address required as an argument.\n");
exit(EXIT_FAILURE);
}
if (inet_aton(argv[1], &addr) == 0)
{
perror("inet_aton");
exit(EXIT_FAILURE);
}
if (inet_pton(AF_INET, argv[1], buf_v4) != 1)
{
perror("inet_pton");
exit(EXIT_FAILURE);
}
*(buf_v6 + IPV6_ADDRESS_SIZE - 5) = 255;
*(buf_v6 + IPV6_ADDRESS_SIZE - 6) = 255;
mempcpy(buf_v6 + IPV6_ADDRESS_SIZE - 4, buf_v4, 4);
if (inet_ntop(AF_INET6, buf_v6, str, INET6_ADDRSTRLEN)==NULL)
{
perror("inet_ntop");
exit(EXIT_FAILURE);
}
printf("%s\n", str);
exit(EXIT_SUCCESS);
}
Tiskni
Sdílej: