5. feladat

Feladva nov. 14-20., 2011

Határidő dec. 10., 2011

Üzenetsorok

Az alábbi feladatok megoldásához két C program megírására van szükség: lesz egy szerver folyamat és egy kliens folyamat. A kliens folyamat kérést küld a szerver folyamatnak, az pedig a kérésnek megfelelő választ visszaküldi a kliensnek. A két folyamat közti kommunikáció üzenetsorok segítségével történik.

1. A kliens egy állománynevet küld a szervernek, a szerver pedig visszaküldi a kliensnek az illető állomány tartalmát, vagy pedig egy hibaüzenetet, amennyiben az állomány nem létezik.

2. A kliens egy felhasználónevet küld a szervernek, a szerver pedig visszaküldi a kliensnek a gép nevét, amelyen az a felhasználó dolgozik, és a rendszerbe lépésének időpontját, illetve egy megfelelő üzenetet -"A felhasználó nincs belépve!" -, amennyiben a felhasználó éppen nem dolgozik. (Több párhuzamos bejelentkezés esetén mindegyiket küldje).

3. A kliens egy időpontot küld a szervernek, a szerver pedig visszaküldi a kliensnek az összes felhasználó nevét, akik éppen dolgoznak, és a megadott időpont után léptek be a rendszerbe.

4. A kliens egy állománynevet és egy oktális számot küld a szervernek. A szerver megvizsgálja, hogy a megadott állomány hozzáférési jogai különböznek-e a megadott számtól. Amennyiben a hozzáférési jogok megegyeznek, egy "Minden OK!" üzenetet küld vissza a kliensnek, ha nem, akkor megváltoztatja az állomány hozzáférési jogait a megadott számnak megfelelően, és azt az üzenetet küldi vissza a kliensnek, hogy "A hozzáférési jogok sikeresen megváltoztak." Hiba esetén (a programnak nincs joga megváltoztatni az illető állomány hozzáférési jogait) megfelelő üzenettel értesíti a klienst.

5. A kliens egy katalógusnevet küld a szervernek, a szerver pedig visszaküldi a kliensnek az illető katalógus teljes tartalmát (alkönytárakkal együtt), illetve egy hibaüzenetet, amennyiben az adott katalógus nem létezik.

6. A kliens egy dátumot (az aktuális hónap egy bizonyos napja) és (egy múltbeli időintervallum kezdetét illetve végét jelőlő) két időpontot (óra) küld a szervernek, a szerver pedig visszaküldi azon felhasználók listáját (felhasználónév + teljes név), akik a megadott napon a megadott időintervallumban be voltak jelentkezve a rendszerbe.

7. A kliens egy állománynevet küld a szervernek, a szerver pedig visszaküldi a kliensnek mindazon katalógusok nevét, amelyek tartalmazzák a megadott állományt. Csak a saját felhasználón belül kell keresni az állományt.

8. A kliens egy felhasználónevet küld a szervernek, a szerver pedig visszaküldi a kliensnek a "finger" parancs segítségével, az illető felhasználóról szerzett információkat, illetve egy hibaüzenetet,amennyiben a rendszer nem ismeri a megadott felhasználót.

9. A kliens egy Unix-parancsot küld a szervernek, a szerver pedig végrehajtja, és visszaküldi a kliensnek a végrehajtás eredményét. Amennyiben a parancs hibás, a szerver egy ennek megfelelő hibaüzenetet küldjön vissza.

10. A kliens egy szöveget és egy katalógusnevet küld a szervernek, a szerver pedig visszaküldi az illető katalógusban szereplő összes szöveges állomány nevét, amely tartalmazza a megadott szöveget, illetve egy hibaüzenetet, amennyiben a megadott katalógus nem létezik.

11. A kliens egy gép nevét küldi a szervernek, és visszakapja a szervertől azon felhasználók listáját, akik az adott gépről jelentkeztek be a rendszebe, és jelenleg még dolgoznak, illetve a bejelentkezésük dátumát és időpontját.

12. A kliens egy gép nevét küldi a szervernek, és visszakapja tőle az összes felhasználó listáját, akik az elmúlt időszakban (amiről nyilvántartás van) az illető gépről jelentkeztek be a rendszerbe, a bejelentkezés dátumát, és azt az időtartamot, ameddig be voltak jelentkezve.

13. A kliens egy felhasználónevet küld a szervernek, és visszakap a szervertől egy megfelelő üzenetet attól függően, hogy az illető felhasználónak van-e elolvasatlan levele vagy sem.

14. A kliens egy állománynevet küld a szervernek, és visszakap tőle egy megfelelő üzenetet, mely megadja az állomány típusát, illetve egy hibaüzenetet, amennyiben az állomány nem létezik.

15. A kliens egy katalógusnevet küld a szervernek, és visszakapja ettől az illető katalógusban szereplő összes szöveges állomány listáját, illetve egy hibaüzenetet, amennyiben a megadott katalógus nem létezik.

16. A kliens egy felhasználónevet küld a szervernek, a szerver pedig visszaküldi a kliensnek azokat a dátumokat, amelyeken az adott felhasználó be volt jelentkezve a rendszerbe, illetve azokat az időtartamokat, ameddig dolgozott


Tippek / gyakori hibák

  • Ne felejtsük el az üzenet típusát a megfelelőképpen beállítni. (az üzenet típusa kötelezően az üzenet első mezője, és egy Long típusú változó)
  • A "múltkor/vagy otthon még ment és most nem működik, pedig semmit nem módosítottam" - típusú hiba esetén megpróbálhatjuk megcserélni a kulcsot. (ettől függetlenül fontos, hogy a függvények visszaadott értékét teszteljük, és a hibákat kezeljük. Lásd. perror, aminek segítségével értelmes hibaüzenetet kaphatunk.)
  • Minden olyan esetben, amikor a szerver válaszának a maximális hosszát nem lehet előre tudni, küldjük, illetve fogadjuk a választ több részletben (vagyis a válaszküldés-, illetve fogadás ne egyetlen üzenetváltásból álljon, hanem tegyük ciklusba).