Files
ratio-miniserv/subjects/subject.hy.txt
2025-09-18 21:32:46 +02:00

44 lines
4.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Առաջադրանքի անունը՝ mini_serv
Ակնկալվող ֆայլեր՝ mini_serv.c
Թույլատրված ֆունկցիաներ՝ write, close, select, socket, accept, listen, send, recv, bind, strstr, malloc, realloc, free, calloc, bzero, atoi, sprintf, strlen, exit, strcpy, strcat, memset
--------------------------------------------------------------------------------
Գրել ծրագիր, որը կսպասի մինչև հաճախորդը կմիանա 127.0.0.1 հասցեով միացման կետին(port) և թույլ կտա հաճախորդներին իրար հետ խոսել։
Այս ծրագիրը որպես առաջին արգումենտ վերցնում է միացման կետը։
Եթե ոչ մի արգումենտ տրված չէ, այն պետք է stderr-ում գրի «Wrong number of arguments»՝ հաջորդված \n-ով և դուրս է գա 1 վիճակով։
Եթե Համակարգային կանչերը սխալ է վերադարձնում մինչև ծրագիրը կսկսի կապեր ընդունել, այն պետք է stderr-ում գրի «Fatal error»՝ հաջորդված \n-ով և դուրս է գա 1 վիճակով։
Եթե հիշողությունը չեք կարողանում տեղակայել, այն պետք է գրի stderr-ում գրի «Fatal error»՝ հաջորդված \n և դուրս գա 1 վիճակով։
Ձեր ծրագիրը պետք է արգելափակող չլինի, բայց հաճախորդը կարող է ծույլ լինել ու եթե ձեր հաղորդագրությունը չկարդա, նրան պետք ՉԷ կապից անջատել։
Ձեր ծրագիրը չպիտի պարունակի #define preproc։
Ձեր ծրագիրը պետք է հետևի միայն 127.0.0.1-ին։
Ձեր ստացած fd-ին արդեն կարգավորված կլինի ստեղծել «recv» և «send»՝ արգելափակելու համար, եթե select-ը չի կանչվել նրանց կանչելուց առաջ, բայց այլ դեպքերում չի արգելափակի։
Երբ հաճախորդը միանում է սերվերին՝
- Հաճախորդին կտրվի id առաջին հաճախորդը կստանա id 0 և յուրաքանչյուր նոր հաճախորդ կստանա վերջին հաճախորդի id + 1
- %d-ն կփոխարինվի այս թվով
- Սերվերին միացած բոլոր հաճախորդներին կուղարկվի հաղորդագրություն՝ «server: client %d just arrived\n»
Հաճախորդները պետք է կարողանան հաղորդագրություններ ուղարկել ձեր ծրագրին։
- Հաղորդագրությունը միայն տպելի նիշերով է լինելու, ստուգելու կարիք չկա
- Յուրաքանչյուր հաղորդագրությունը պետք է ավարտվի \n-ով։
- Երբ սերվերը հաղորդագրություն ստանա, այն պետք է դա ուղարկի մյուս բոլոր հաճախորդներին՝ հաղորդագրությունից առաջ «client %d:»-ով։
Երբ հաճախորդը սերվերից անջատվում է,
- սերվերին կապված բոլոր հաճախորդներին նամակ է ուղարկվում՝ «server: client %d just left\n»։
Հիշողության կամ fd արտահոսքեր չեն թույլատրվում։
Ձեզ օգնելու համար, ֆայլի main.c-ն կգտնեք սերվերի սկզբնական տողերով ու որոշ օգտակար ֆունկցիաներով։ (Ուշադի՛ր եղեք այս ֆայլում չթույլատրված ֆունկցիաներ գործածելիս կամ այնպիսի բաներ գրելիս, որոնք ձեր վերջնական ծրագրում չպիտի լինեն)
To help you, you will find the file main.c with the beginning of a server and maybe some useful functions. (Beware this file use forbidden functions or write things that must not be there in your final program)
Զգուշացում։ Մեր փորձարկիչը ակնկալում է, որ հաղորդագրությունները ինչքան հնարավոր է արագ ուղարկեք։ Անիմաստ բուֆերներ պետք չէ անել։
Գնահատումը կարող է սովարականից մի քիչ երկար տևել
Հուշում՝ կարող եք nc-ն գործածել ձեր ծրագիրը փորձարկելու համար։
Հուշում՝ պետք է nc-ն գործածեք ձեր ծրագիրը փորձարկելու համար։
Հուշում՝ փորձարկելու համար կարող եք գործածել fcntl(fd, F_SETFL, O_NONBLOCK), բայց գործածե՛ք select և ԱՅԼԵՎՍ ԵՐԲԵՔ մի՛ ստուգեք (man 2 send)։