Společnost Valve zveřejnila (GitLab) nákresy ovladače Steam Controller a puku. Pro všechny, kdo by jej chtěli hacknout nebo modifikovat, případně pro ně navrhnout nějaké příslušenství. Pod licencí Creative Commons (CC BY-NC-SA 4.0).
PHP bylo dlouho distribuováno pod vlastní licencí – s výjimkou částí spadajících pod licenci Zend Engine. Po několikaleté práci se povedlo PHP přelicencovat na 3bodovou licenci BSD.
Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube). Na Linuxu je vedle Qt frontendu nově k dispozici také GTK4 / libadwaita frontend.
Neziskové průmyslové konsorcium Khronos Group vydalo verzi 3.1 specifikace OpenCL (Open Computing Language). OpenCL je průmyslový standard pro paralelní programování heterogenních počítačových systémů.
Homebridge pro integraci chytrých domácích zařízení byl vydán ve verzi 2.0.0. Nově vedle protokolu HomeKit Accessory Protocol (HAP) podporuje standard chytré domácnosti Matter.
Omarchy je linuxová distribuce s dlaždicovým správcem oken Hyprland. Založena je na Arch Linuxu. Vydána byla v nové verzi 3.7.0 - The Gaming Edition. Z novinek lze vypíchnout příkaz omarchy a celou řadu herních možností.
CyberChef byl vydán v nové major verzi 11. Přehled novinek v Changelogu. CyberChef je webová aplikace pro analýzu dat a jejich kódování a dekódování, šifrování a dešifrování, kompresi a dekompresi, atd. Často je využívaná při kybernetických cvičeních a CTF (Capture the Flag).
Byla vydána nová verze 2.4.67 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 11 zranitelností.
Brush (Bo(u)rn(e) RUsty SHell) je v Rustu napsaný shell kompatibilní s Bash (Bourne Again SHell). Vydána byla verze 0.4.0.
Google zveřejnil seznam 1 141 projektů (vývojářů) od 184 organizací přijatých do letošního, již dvaadvacátého, Google Summer of Code. Přihlášeno bylo celkově 23 371 projektů od 15 245 vývojářů ze 131 zemí.
/proc/self/exe ukazuje na aktuální binárku...
#include <limits.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
/* Finds the path containing the currently running program executable.
The path is placed into BUFFER, which is of length LEN. Returns
the number of characters in the path, or -1 on error. */
size_t get_executable_path (char* buffer, size_t len)
{
char* path_end;
/* Read the target of /proc/self/exe. */
if (readlink ("/proc/self/exe", buffer, len) <= 0)
return -1;
/* Find the last occurrence of a forward slash, the path separator. */
path_end = strrchr (buffer, '/');
if (path_end == NULL)
return -1;
/* Advance to the character past the last slash. */
++path_end;
/* Obtain the directory containing the program by truncating the
path after the last slash. */
*path_end = '\0';
/* The length of the path is the number of characters up through the
last slash. */
return (size_t) (path_end - buffer);
}
int main ()
{
char path[PATH_MAX];
get_executable_path (path, sizeof (path));
printf ("this program is in the directory %s\n", path);
return 0;
}
strrchr na bufferu hned po readlink? Mě se to nezdá:
readlink() does not append a null byte to buf.
int main(int argc, char* argv[])
{
printf("%s\n", argv[0])
return 0;
}
#include <libgen.h>
int main(int argc, char* argv[])
{
printf("%s\n", dirname(argv[0]))
return 0;
}
argv[0] mi připadá mnohem portabilnější než /proc (který třeba nemusí být ani na všech Linuxových instalacích, o jiných unix-like OS či win/dos ani nemluvě).
#include <stdio.h>
int main(int argc,char** argv)
{
int i;
for(i=0;i<argc;i++)
printf("ARG %d: %s\n", i, argv[i]);
return 0;
}
lubos@ares ~ $ ./test ARG 0: ./testTomu říkáte absolutní cesta?
Nicméně i tak by to šlo řešit -- absolutní cesta z relativní + příp. dereference linku.
P.S.: Ty dva posty jsem napsal hned po sobě a další komentáře jsme četl až potom, takže podrobnější vysvětlení jsem fakt nepotřeboval.
$0 na funkční cestu k němu.
/proc/self/exe.
Navíc je potřeba mít na paměti, že na otázku "ve kterém adresáři se nachází tento soubor" nemusí být jednoznačná odpověď nebo dokonce může odpověď znít "v žádném"…
PATH, jen jménem, bude v argv[0] jen to jméno.
Tiskni
Sdílej: