Внедрявам сървър, който обслужва множество клиенти и имам нужда от променлива на сървъра да бъде в споделена памет, така че клиентът действително да вижда какво е редактирал друг клиент в крайна сметка.
Опитах се да се огледам, но не разбрах дали има някакъв начин да постигна това с помощта на fork() или трябва напълно да променя начина, по който се справям с клиентите. По-специално, не знам дали трябва да внедря предадени процеси или нишки. Също така, кой е по-простият начин?
Това е моят код след деклариране на int var в main:
while(1) {
printf("Waiting connection...\n");
if ((connfd = accept(listenfd, (struct sockaddr *) NULL, NULL)) < 0) {
perror("Accept Error");
exit(1);
}
if ((pid = fork()) == 0) {
close (listenfd);
printf("Variable: %d\n", var); // var = 0
var = 1;
printf("Variable: %d\n", var); // var = 1
exit(0);
}
close(connfd);
}
Когато се свържа с друг клиент, виждам отново var = 0, защото детето генерира копие на родителския процес.
Опитах да използвам статични или да декларирам глобални променливи извън main(), но както разбрах, няма ефект.