Oto zadanie
#include<unistd.h>
#include<string.h>
int main(int argc, char *argv[]) {
strncpy(argv[0], "to jest test", strlen(argv[0]));
sleep(10);
return 0;
}
Ma on zmieniać nazwę procesu, ale niestety nie za bardzo mu to wychodzi. Oto wynik pracy polecenia ps:
[rusek@proton ~]$ gcc argv.c
[rusek@proton ~]$ ./a.out &
[1] 14281
[rusek@proton ~]$ ps f
PID TTY STAT TIME COMMAND
14164 pts/4 Ss 0:00 -bash
14281 pts/4 S 0:00 _ to jest
14282 pts/4 R+ 0:00 _ ps f
Popraw go tak, aby nowa nazwa procesu mogła być dłuższa niż liczba znaków w napisie reprezentującym tekst polecenia wpisany w programie bash. Jak długa może być maksymalnie ta nazwa? Dla uproszczenia możesz założyć, iż proces nie potrzebuje odczytywać zmiennych środowiska.
Wskazówka: przypomnij sobie schemat pamięci procesu pokazywany na wykładzie https://connect.sggw.pl/p3jlxqqgbil/. Wpisy odpowiadające zmiennym środowiska można odczytywać w następujący sposób:
#include<stdio.h>
extern char *environ[];
int main(int argc, char *argv[]) {
int i=-1;
while(environ[++i])
printf("%s\n", environ[i]);
return 0;
}