5. feladat

Feladva nov. 9-15., 2009

Határidő dec. 05., 2009

Üzenetsorok

A feltöltendő két állomány neve: S05_nn_xxxxxxxx_s.c (szerver) illetve S05_nn_xxxxxxxx_c.c (kliens), ahol nn - feladat száma; xxxxxxxx - felhasználó azonosítója a linux szerveren.

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.

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."

5. A kliens egy katalógusnevet küld a szervernek, a szerver pedig visszaküldi a kliensnek az illető katalógus tartalmát, 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.

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 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.

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 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.

13. 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.

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 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.


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. strerror, 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).