Czy cechy Unii w języku C mają wpływ na zdalne wywoływanie procedur?

0

Tak jak powyżej. Pierwszy raz widzę pojęcie Unii, i wydaje mi się, że rozumiem jej zastosowanie. Lecz nie umiem odpowiedzieć na to pytania. IMO wpływu nie ma, ale czy to prawda?

4

Jakie cechy? Co rozumiesz przez zdalne wywoływanie procedur? To brzmi jak pytanie z egzaminu jakiegoś leśnego dziadka z uczelni, który wprowadził swoją własną nomenklaturę. Wtedy odpowiedzi szukaj w wykładach.

0
kq napisał(a):

Jakie cechy? Co rozumiesz przez zdalne wywoływanie procedur? To brzmi jak pytanie z egzaminu jakiegoś leśnego dziadka z uczelni, który wprowadził swoją własną nomenklaturę. Wtedy odpowiedzi szukaj w wykładach.

To pytanie z pewnej książki o systemach rozproszonych.
Pełne pytanie to:
Język C ma konstrukcję zwaną unią, w której pole rekordu (nazywanego w języku C strukturą) może wyrażać jedną z kilku możliwości. Podczas wykonywania programu nie ma gwarantowanego sposobu określenia, którą z nich takie pole zawiera. Czy ta cecha języka C ma jakiś wpływ na zdalne wywoływanie procedur? Wyjaśnij swoją odpowiedź.

O rozproszonych i o c wiem praktycznie nic. Teraz próbuje to zrozumieć, jednak z praktycznie zerową wiedzą, to nawet jak natknąłbym się na prawidłową odpowiedź to nawet bym tego nie zauważył. Z programowaniem nie wiążę swojej przyszłości, ale przedmiot jednak trzeba jakoś zaliczyć. Mus to mus.

3

Ciężko na to pytanie odpowiedzieć nie znając kontekstu w którym zostało zadane, oraz co oznacza w żargonie tej książki tudzież rozdziału zdalne wywołanie procedur. Niejednoznaczność, które pole unii jest obecnie aktywne powinno być szczegółem implementacyjnym i operując na interfejsie nie powinienem musieć się tym przejmować. Jednakże, jeśli programista chce to jak najbardziej może zaimplementować swoją logikę tak, że wywołujący procedurę będzie musiał się tym przejmować.

0
several napisał(a):

Ciężko na to pytanie odpowiedzieć nie znając kontekstu w którym zostało zadane, oraz co oznacza w żargonie tej książki tudzież rozdziału zdalne wywołanie procedur. Niejednoznaczność, które pole unii jest obecnie aktywne powinno być szczegółem implementacyjnym i operując na interfejsie nie powinienem musieć się tym przejmować. Jednakże, jeśli programista chce to jak najbardziej może zaimplementować swoją logikę tak, że wywołujący procedurę będzie musiał się tym przejmować.

Dzięki, może to mnie jakoś naprowadzi.

1

Z tym "zdalnym wywoływaniem procedur" to chodzi zapewne o RPC (remote procedure call) - coś na czym działa m.in. NFS (network file system) w Unixach/Linuxie. Da się znaleźć w wikipedii.

Nie wiem czy dobrze rozumiem pytanie - ale zapewne chodzi o "pakowanie" danych w kolejnych bajtach pamięci, tak żeby serwer i klient zobaczyły tę samą informację w sposób poprawny - czyli to co zamierzał wysłać klient - serwer powinien zinterpretować tak samo.

Głowy nie dam za to ale coś mi się wydaje że RPC stosowało swój własny format kodowania/przesyłania danych. Może w tym pytaniu chodzi właśnie o to jaki wpływ ma unia na sposób kodowania tych danych w tym formacie RPC?

0

Hmm...
Przy okazji opracowywania RPC dla systemu Solaris, Sun Microsystems dodał usługi do identyfikacji uruchomionego serwisu (portmapper - port 111) oraz przesyłania w sposób ujednolicony danych kodowanych w protokołach sieciowych. Chodzi o protokół XDR https://en.wikipedia.org/wiki/External_Data_Representation . Rozwiązywał np. problem kolejności bajtów danych czyli problem który występuje w unii używanej na różnych platformach.

Dodano także narzędzie które kompiluje kod do postaci w C (rpcgen) https://linux.die.net/man/1/rpcgen

Ale to są bardzo antyczne technologie... :)

Odpowiedź na pytanie brzmi więc: tak ma wpływ.

0

Bardzo ogólnikowe pytanie. Jednak biorąc pod uwagę, że C nie ma systemowego sposobu zapamiętywania opcji z unii (to twoja sprawa jak to zrobisz), a rozmiary obiektu jest ustawiany na największą opcje, odpowiedź prawdopodobnie brzmi nie. No chyba że przez wpływ mamy na myśli wpływ na naszą pracę programisty, wtedy na pewno mamy dodatkową rzecz do ogarnięcia. Chyba że mamy jakiś ponadstandardowy hack jak te z biblioteki QT.

1

Użycie unii czyni kod specyficzny dla danej platformy (procesora/kompilatora).
Powodów jest wiele, zaczynając od endiany, przez rożny rozmiar typów całkowitych, aż po różne wykorzystanie liczb zmiennoprzecinkowych.
Jeśli unia tego nie uwzględnia (za pomocą makr) to wszelka internalizacja eksternalizacja może mieć poważne błędy.

Typowy przykład to API do obsługi sieci, które zostało zaprojektowane na procesory z dużą endianą, wykorzystuje unie, ale na każdej platformie te unie wyglądają inaczej, by uwzględnić specyfikę danej platformy.

0
MarekR22 napisał(a):

Użycie unii czyni kod specyficzny dla danej platformy (procesora/kompilatora).
Powodów jest wiele, zaczynając od endiany, przez rożny rozmiar typów całkowitych, aż po różne wykorzystanie liczb zmiennoprzecinkowych.
Jeśli unia tego nie uwzględnia (za pomocą makr) to wszelka internalizacja eksternalizacja może mieć poważne błędy.

Typowy przykład to API do obsługi sieci, które zostało zaprojektowane na procesory z dużą endianą, wykorzystuje unie, ale na każdej platformie te unie wyglądają inaczej, by uwzględnić specyfikę danej platformy.

Bzdety. Takie rzeczy jak endiannes i rozmiary typów dotyczą wszystkich typów (poza void I char), nie tylko unii.

0
Pogodzie napisał(a):

Język C ma konstrukcję zwaną unią, w której pole rekordu (nazywanego w języku C strukturą) może wyrażać jedną z kilku możliwości. Podczas wykonywania programu nie ma gwarantowanego sposobu określenia, którą z nich takie pole zawiera.

Nie ma gwarantowanego przez sam język sposobu określenia, więc trzeba sobie to określić jakoś samemu i liczyć się z tym, że błąd w tym określeniu nie będzie wyłapany przez kompilator - co może powodować dziwne i trudne w wykryciu błędy w działaniu programu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1