V červenci loňského roku organizace Apache Software Foundation (ASF) oznámila, že se částečně přestane dopouštět kulturní apropriace a změní své logo. Dnes bylo nové logo představeno. "Indiánské pírko" bylo nahrazeno dubovým listem a text Apache Software Foundation zkratkou ASF. Slovo Apache se bude "zatím" dál používat. Oficiální název organizace zůstává Apache Software Foundation, stejně jako názvy projektů, například Apache HTTP Server.
Byla vydána (𝕏) srpnová aktualizace aneb nová verze 1.104 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.104 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Spotify spustilo přehrávání v bezztrátové kvalitě. V předplatném Spotify Premium.
Spoluzakladatel a předseda správní rady americké softwarové společnosti Oracle Larry Ellison vystřídal spoluzakladatele automobilky Tesla a dalších firem Elona Muska na postu nejbohatšího člověka světa. Hodnota Ellisonova majetku díky dnešnímu prudkému posílení ceny akcií Oraclu odpoledne vykazovala nárůst o více než 100 miliard dolarů a dosáhla 393 miliard USD (zhruba 8,2 bilionu Kč). Hodnota Muskova majetku činila zhruba 385 miliard dolarů.
Bylo vydáno Eclipse IDE 2025-09 aneb Eclipse 4.37. Představení novinek tohoto integrovaného vývojového prostředí také na YouTube.
T-Mobile od 15. září zpřístupňuje RCS (Rich Communication Services) zprávy i pro iPhone.
Společnost ARM představila platformu Arm Lumex s Arm C1 CPU Cluster a Arm Mali G1-Ultra GPU pro vlajkové chytré telefony a počítače nové generace.
Unicode Consortium, nezisková organizace koordinující rozvoj standardu Unicode, oznámila vydání Unicode 17.0. Přidáno bylo 4 803 nových znaků. Celkově jich je 159 801. Přibylo 7 nových Emoji.
Apple představil (YouTube) telefony iPhone 17 Pro a iPhone 17 Pro Max, iPhone 17 a iPhone Air, sluchátka AirPods Pro 3 a hodinky Watch Series 11, Watch SE 3 a Watch Ultra 3.
Realtimová strategie Warzone 2100 (Wikipedie) byla vydána ve verzi 4.6.0. Podrobný přehled novinek, změn a oprav v ChangeLogu na GitHubu. Nejnovější verzi Warzone 2100 lze již instalovat také ze Snapcraftu a Flathubu.
time caller: messageA dale vytvorit knihovnu s funkcí pro zápis do této roury. dalším parametrem daemona je interval, ve kterém daemon zapisuje vlastní statistiku (počet obdržených zpráv) do syslogu. Daemon jsem napsal pomoci fce select(), ale nemuzu odstranit chybu, ktera spociva v ukonceni programu pote, co si precte prvni zpravu z roury a korektne ji zapise do zadaneho logu. V nasledujicim prubehu WHILE funkce select vrati hodnotu vetsi nez nula, jakoby dosla dalsi zprava, ale funkce read vrati nulu. Zajimalo by me, kde je chyba. Je to nekde v souboru s rourou, nebo v samotnem spatnem pouziti select ? Kod daemona:
/* #define DEFAULT_INTERVAL 2 #define SIZE 256 char* get_current_time() { time_t current_time; char* c_time_string; int j; current_time = time(NULL); /* Obtain current time as seconds elapsed since the Epoch. */ if (current_time == ((time_t)-1)) { (void) fprintf(stderr, "Failure to compute the current time."); exit(EXIT_FAILURE); } c_time_string = ctime(¤t_time); /* Convert to local time format. */ for ( j = 0; c_time_string[j] != '\n'; j++) /*Get rid EOL*/ ; c_time_string[j] = '\0'; if (c_time_string == NULL) { (void) fprintf(stderr, "Failure to convert the current time."); exit(EXIT_FAILURE); } return c_time_string; } void print_help() { printf("Programme must be run with with 2 arguments:\n" "argv[1] is a name of the file which the daemon wil be writting in\n" "argv[2] is an interval the daemon will be sending logs into syslog\n"); } int main(int argc, char *argv[]) { if (argc != 3) { print_help(); exit(1); } int c; while((c = getopt(argc, argv, "h")) != -1) { switch (c) { case 'h': print_help(); break; case '?': printf("try -h for help"); break; default: break; } } FILE *fw; int fp; char buf[SIZE]; char *linesep; int line, i, count; buf[0] = '\0'; // in case there is nothing to read buf[SIZE] = '\0'; // guarentee a end-of-line fd_set readfds; struct timeval timeout; int r; int interval = atoi(argv[2]); openlog ("exampleprog", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); fprintf(stderr, "Daemonizing...\n"); //daemon(0,0); unlink("/tmp/pb173_syslog"); mkfifo("/tmp/pb173_syslog", S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH); fp = open("/tmp/pb173_syslog", O_RDONLY | O_NONBLOCK); if(fp == -1) { syslog (LOG_CRIT, "Could not open the pipe: %s\n", strerror(errno)); exit(1); } fw = fopen(argv[1], "a+"); if(fw == NULL) { openlog ("exampleprog", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); syslog (LOG_CRIT, "Error openning logfile : %s\n", strerror(errno)); exit(1); } timeout.tv_sec = interval; timeout.tv_usec = 0; count = 0; line = 0; r = 0; while(1) { FD_ZERO(&readfds); FD_SET(fp,&readfds); r = select(fp+1, &readfds, NULL, NULL, &timeout); if (r == -1) { openlog ("daemon", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); syslog (LOG_CRIT, "Error openning logfile : %s\n", strerror(errno)); close(fp); fclose(fw); exit(1); } if (r == 0) { timeout.tv_sec = interval; timeout.tv_usec = 0; setlogmask (LOG_UPTO (LOG_NOTICE)); openlog ("daemon", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL1); syslog (LOG_NOTICE, "Number of received messages: %d\n", count ); closelog (); } else { line += (r = read(fp, buf+line, SIZE-line-1)); if (r == 0) { close(fp); fclose(fw); exit(EXIT_SUCCESS); } buf[line] = '\0'; if (line && (linesep = strstr(buf, "\n"))) { *linesep = '\0'; char *caller; int callerLength; char *message; caller = strtok(buf, "^"); callerLength = strlen(caller); message = caller + callerLength + 1; fprintf(fw, "%s %s: %s\n", get_current_time(), caller, message); fflush(fw); memmove(buf, linesep + 1, (line = strlen(linesep + 1)) + 1); count++; } } } close(fp); fclose(fw); exit(EXIT_SUCCESS); }A kod funkce, ktera zapisuje do roury:
int sl_log(const char *caller, const char* message) { int fp; fp = open("/tmp/pb173_syslog", O_WRONLY); char *msg; if (fp == -1) { perror("Could not open the pipe\n"); exit(1); } asprintf(&msg, "%s^%s\n", caller, message); write(fp, msg, strlen(msg)); free(msg); close(fp); return 0; }
Řešení dotazu:
Tiskni
Sdílej: