π₯§ ΠΠΈΡΠ°ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎΠ³ ΠΊΠΎΠ΄Π° Ρ Π¦-Ρ
Π’ΠΎ ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°ΡΠ΅ Ρ Π¦-Ρ, Π½Π΅ Π·Π½Π°ΡΠΈ Π΄Π° ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° ΠΏΠΈΡΠ΅ΡΠ΅ Π»ΠΎΡ/ΡΠ»ΠΎΠΆΠ΅Π½/Π΄ΡΠ³Π°ΡΠ°ΠΊ ΠΊΠΎΠ΄. Π¦ Π½ΠΈΡΠ΅ Π½Π΅ΠΏΡΠΈΡΠ°ΡΠ΅Ρ, ΡΠ΅Ρ Π»ΠΎΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΈΡΠ΅ Ρ Π±ΠΈΠ»ΠΎ ΠΊΠΎΠΌ ΡΠ΅Π·ΠΈΠΊΡ Π° Π΄ΠΎΠ±Π°Ρ/ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π°Π½/ΠΊΡΠ°ΡΠ°ΠΊ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΈΡΠ΅ ΠΈ Ρ Π¦-Ρ. ΠΠΎΠΊΠ°Π·Π°ΡΠ΅ΠΌΠΎ ΠΊΠ°ΠΊΠΎ ΡΠ΅ 20Π°ΠΊ ΡΠ΅Π΄ΠΎΠ²Π° Π¦ ΠΊΠΎΠ΄Π° ΠΊΠΎΡΠΈ ΡΠ΅ Π±Π°Π²ΠΈ Π½ΠΈΡΠΊΠ°ΠΌΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ²Π΅Π΄Π΅ Π½Π° ΡΠ΅Π΄Π°Π½ Π΄ΠΎ Π΄Π²Π° ΡΠ΅Π΄Π°.
Π£Π³ΡΠ΅Π΄, βΠ½ΠΈΡΠΊΠ°β Π½ΠΈΡΠ΅ Π½Π°ΡΡΡΠ΅ΡΠ½ΠΈΡΠΈ ΠΏΡΠ΅Π²ΠΎΠ΄ Π·Π° ΡΡΡΠΈΠ½Π³ (ΠΎΠ±ΠΈΡΠ½ΠΎ ΡΠ΅ Π½ΠΈΡΠΊΠ° ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° Π±ΠΈΡΠ΅ΡΠ΅, ΠΌΠ°Π΄Π°, Ρ ΠΈΠ·Π²Π΅ΡΠ½ΠΎΠΌ ΡΠΌΠΈΡΠ»Ρ, Π¦ ΡΡΡΠΈΠ½Π³ΠΎΠ²ΠΈ ΡΠ΅ΡΡ Π±ΠΈΡΠ΅ΡΠΈ), Π°Π»ΠΈ, ΡΠΎΡ ΡΠ΅ ΡΠ΅Π΄ΠΈΠ½ΠΎ ΠΏΡΠΈΡ Π²Π°ΡΡΠΈΠ²Π° βΡΡΡΡΠ½Π°β, Π° Π½ΠΈΡΠΊΠ° ΡΠ΅ ΡΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Ρ ΠΎΠ±ΠΈΡΠ½ΠΎΠΌ Π³ΠΎΠ²ΠΎΡΡ, ΠΏΠ° ΡΠ΅ ΠΌΠ°ΡΠ° ΡΠ°Π½ΡΠ° Π΄Π° ΡΠ΅ ΠΏΠΎΠ³ΡΠ΅ΡΠ½ΠΎ ΡΡΠΌΠ°ΡΠ΅ΡΠ΅ (ΠΈ ΠΈΠ·Π²ΠΎΡΠ½ΠΈ ΠΏΡΠ΅Π²ΠΎΠ΄ βΠΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΎΠ³ ΠΠ΅Π·ΠΈΠΊΠ° Π¦β ΠΊΠΎΡΠΈΡΡΠΈ ΠΈΠ·ΡΠ°Π· βΠ½ΠΈΡΠΊΠ°β).
Π‘Π²ΠΈ ΠΊΠ°ΠΆΡ Π΄Π° ΡΠ΅ Π¦ ΠΊΠ°ΡΠ°ΡΡΡΠΎΡΠ° Π·Π° ΡΠ°Π΄ ΡΠ° Π½ΠΈΡΠΊΠ°ΠΌΠ°
ΠΠ½ΠΎ ΡΡΠΎ ΡΠ΅ ΠΎΠ±ΠΈΡΠ½ΠΎ ΠΌΠΈΡΠ»ΠΈ ΡΠ΅ Π΄Π° βΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π° ΡΠ΅ ΡΠ°Π΄ΠΈβ Π΄Π° Π±ΠΈ ΡΠ΅
ΠΎΠ±ΡΠ°ΡΠΈΠ²Π°Π»Π΅ Π½ΠΈΡΠΊΠ΅ Ρ Π¦-Ρ, ΡΠ΅Ρ Π½Π΅ ΠΏΠΎΡΡΠΎΡΠΈ ΠΏΡΠ°Π²Π° Π°ΠΏΡΡΡΠ°ΠΊΡΠΈΡΠ°. ΠΠΎΡΡΠΎΡΠΈ ΡΠ°ΠΌΠΎ
ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΡΠ°, ΠΏΠΎΠ΄ΡΠΆΠ°Π½Π° ΠΎΠ΄ ΡΡΡΠ°Π½Π΅ Π΄ΠΎΡΠ»ΠΎΠ²Π½ΠΈΡ
Π½ΠΈΡΠΊΠΈ (Π΅Π½Π³. string literal)
ΠΈ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, Π΄Π° ΡΠ΅ Π½ΠΈΠ· Π·Π½Π°ΠΊΠΎΠ²Π° ΠΊΠΎΡΠΈ ΡΠ΅ Π·Π°Π²ΡΡΠ°Π²Π° ΠΠ£Π Π·Π½Π°ΠΊΠΎΠΌ
('\0'
) ΡΠΏΡΠ°Π²ΠΎ Π½ΠΈΡΠΊΠ°.
ΠΠ²ΠΎ ΡΠ΅ΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π°Π»ΠΈ, Π²ΡΠ»ΠΎ ΡΠ΅ΡΡΠΎ, Π½ΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ βΠΏΡΠ°ΡΠΈΡΠΈ ΡΠ΅β Ρ ΠΎΠ±ΡΠ°Π΄ΠΈ Π½ΠΈΡΠΊΠΈ. Π‘Π°ΠΌΠΎ ΡΡΠ΅Π±Π° Π±ΠΈΡΠΈ ΠΏΠ°ΠΆΡΠΈΠ².
ΠΠ° Π²ΠΈΠ΄ΠΈΠΌΠΎ ΡΠ°Ρ Π»ΠΎΡ ΠΊΠΎΠ΄.
Π‘Π»Π΅Π΄ΠΈ ΡΡΠ½ΠΊΡΠΈΡΠ° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Ρ ΠΊΠΎΠΌΠ΅ΡΡΠΈΡΠ°Π»Π½ΠΈΠΌ ΡΡΠ»ΠΎΠ²ΠΈΠΌΠ°, ΠΎΠ΄ ΡΡΡΠ°Π½Π΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΎ ΠΈΡΠΊΡΡΠ½ΠΎΠ³ ΠΈ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΠ³ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ° ΠΊΠΎΡΠΈ Π·Π½Π° Π¦. Π’ΠΎ ΡΠ΅ Π΄ΠΎΠ±Π°Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠ°ΠΊΠΎ βΡΡΡΠ°ΡΠ½Π΅β ΡΡΠ²Π°ΡΠΈ ΡΡΠ΄Π΅ ΠΏΡΠ°Π²Π΅ Ρ Π¦-Ρ, Π±Π΅Π· ΠΈΠΊΠ°ΠΊΠ²ΠΎΠ³ ΡΠ°Π·Π»ΠΎΠ³Π°.
#define EXPECTED_STRING "Whatev"
int read_expected_string(int stream)
{
char line[1024];
size_t expected_len = strlen(EXPECTED_STRING);
int count = read(stream, line, sizeof line);
int line_length = (count < sizeof(line)) ? count : (sizeof(line) - 1);
if(line_length < (version_tag_len))
{
return FAILURE;
}
line[line_length] = '\0';
line[version_tag_len] = '\0';
if(!strcmp(line, EXPECTED_STRING))
{
return SUCCESS;
}
return FAILURE;
}
ΠΡΠΎΠ±Π°ΡΡΠ΅ Π΄Π° ΡΡ Π²Π°ΡΠΈΡΠ΅ ΡΡΠ° ΠΎΠ²Π°Ρ ΠΊΠΎΠ΄ ΠΏΠΎΠΊΡΡΠ°Π²Π° Π΄Π° ΡΡΠ°Π΄ΠΈ. ΠΠ΅ΠΌΠΎΡΡΠ΅ Π΄Π° ΡΠΈΡΠ°ΡΠ΅ Π΄Π°ΡΠ΅ Π΄ΠΎΠΊ Π½Π΅ ΠΎΡΠΊΡΠΈΡΠ΅ΡΠ΅ ΠΎ ΡΠ΅ΠΌΡ ΡΠ΅ ΡΠ΅Ρ, ΠΈΠ»ΠΈ Π²Π°ΠΌ ΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΡΠΌΡΡΠΈ ΠΎΠ΄ Π³Π»Π΅Π΄Π°ΡΠ°.
ΠΠΎΡΡΠΎΡΠΈ Π²ΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Ρ. ΠΠ΅ΠΊΠ΅ Π±ΠΈ ΡΠ΅ΡΠΈΠΎ Π΄ΠΎΠ±Π°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΡΠΈ
ΠΏΡΠ΅Π²ΠΎΠ΄ΠΈΠ»Π°Ρ (strlen()
ΡΠ°ΡΡΠ½Π° Π΄ΡΠΆΠΈΠ½Ρ Π΄ΠΎΡΠ»ΠΎΠ²Π½Π΅ Π½ΠΈΡΠΊΠ΅, Π½Π°ΠΌΠ΅ΡΡΠΎ Π΄Π° ΡΠ΅
ΡΠΏΠΎΡΡΠ΅Π±ΠΈ sizeof
). ΠΠ΅ΠΊΠΈ βΠ³Π΅Π½ΠΈΡΠ°Π»Π½ΠΈβ ΠΏΡΠ΅Π²ΠΎΠ΄ΠΈΠ»Π°Ρ Π±ΠΈ ΡΠ°ΠΊ ΠΌΠΎΠ³Π°ΠΎ Π΄Π°
Π·Π°ΠΊΡΡΡΠΈ Π΄Π° Π½Π΅ΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π΅ Π·Π° line[line_length] = '\0'
, ΡΠ΅Ρ
version_tag_len <= line_length
, ΠΏΠ° Π½Π°ΡΠ΅Π΄Π½ΠΈ ΡΠ΅Π΄ Π½ΠΈΡΠ΅ΠΌΡ Π½Π΅ ΡΠ»ΡΠΆΠΈ,
Π½ΠΈΡΠΊΠ° ΡΠ΅ Π²Π΅Ρ ΠΎΠΊΡΠ°ΡΠ΅Π½Π° Π²ΠΈΡΠ΅ Π½Π΅Π³ΠΎ ΡΡΠΎ ΡΠ΅ ΡΠΎ ΡΠ°Ρ Π½Π°ΡΠ΅Π΄Π½ΠΈ ΡΠ΅Π΄ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅.
ΠΠ°Π·ΠΈΠ² ΡΡΠ½ΠΊΡΠΈΡΠ΅ ΡΠ°ΠΊΠΎΡΠ΅ Π½ΠΈΡΠ΅ ΡΡΠ°ΡΠ°Π½. ΠΠ°ΠΊΠΎ ΡΡΠΎΡΠΈ, ΡΠΎΠ²Π΅ΠΊ Π±ΠΈ ΠΏΠΎΠΌΠΈΡΠ»ΠΈΠΎ Π΄Π° ΡΠ΅
stream
Π±ΠΈΡΠΈ ΡΠΈΡΠ°Π½ ΡΠ²Π΅ Π΄ΠΎΠΊ Π½Π΅ Π΄ΠΎΠ±ΠΈΡΠ΅ΠΌΠΎ EXPECTED_STRING
. Π¨ΡΠΎ ΡΠΏΡΠ°Π²ΠΎ
Π½ΠΈΡΠ΅ ΡΠ»ΡΡΠ°Ρ.
Π§Π°ΠΊ ΠΈ Π΄Π° ΡΠ²Π΅ ΠΎΠ²ΠΎ Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ ΡΡΠ΅Π΄ΠΈΠΌΠΎ ΠΌΠΈ ΠΈΠ»ΠΈ Π½Π°Ρ Π³Π΅Π½ΠΈΡΠ°Π»Π½ΠΈ ΠΏΡΠ΅Π²ΠΎΠ΄ΠΈΠ»Π°Ρ, ΠΎΠ²ΠΎ ΡΠ΅ ΠΈ Π΄Π°ΡΠ΅ ΠΏΡΠ΅ΠΊΠΎ ΡΠ²Π°ΠΊΠ΅ ΠΌΠ΅ΡΠ΅ ΡΠ»ΠΎΠΆΠ΅Π½ΠΎ.
ΠΠ²Π°Ρ ΠΊΠΎΠ΄, Ρ ΡΡΠ²Π°ΡΠΈ, ΡΠ°ΠΌΠΎ ΠΆΠ΅Π»ΠΈ Π΄Π° ΠΏΡΠΎΡΠΈΡΠ° ΡΠ΅Π΄Π½Ρ Π½ΠΈΡΠΊΡ - ΡΠ΅Π΄ ΠΈΠ· Π½Π΅ΠΊΠΎΠ³ βΡΠΎΠΊΠ°β (Π½Π΅Π±ΠΈΡΠ½ΠΎ ΡΡΠ° ΡΠ΅ ΡΠ°Ρ ΡΠΎΠΊ - Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, ΡΡΠΈΡΠ½ΠΈΡΠ°, ΡΠ΅Π²β¦) ΠΈ ΡΠΏΠΎΡΠ΅Π΄ΠΈ ΡΠΎ ΡΠ° ΠΎΡΠ΅ΠΊΠΈΠ²Π°Π½ΠΎΠΌ Π½ΠΈΡΠΊΠΎΠΌ. ΠΠΈΡΡΠ° Π²ΠΈΡΠ΅.
Π£ Π²Π°ΡΠ΅ΠΌ ΠΎΠΌΠΈΡΠ΅Π½ΠΎΠΌ Π²ΠΈΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΎΠΌ ΡΠ΅Π·ΠΈΠΊΡ
ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π·Π° βΡΠΎΠΊβ, ΡΡΠ΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ (ΠΎΠ²ΠΎ ΡΠ΅ Π ΡΠ±ΠΈ, Π°Π»ΠΈ ΡΠ»ΠΈΡΠ½ΠΎ ΡΠ΅ ΠΌΠΎΠ³ΡΡΠ΅ Ρ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΡΠ΅Π·ΠΈΡΠΈΠΌΠ°):
def expect_string(stream)
stream.read().start_with?(EXPECTED_STRING)
end
ΠΠ²ΠΎ ΠΎΡΠΈΠ³Π΅Π΄Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ°ΡΡΡΠ΅ Π³ΡΠ΅ΡΠΊΠ΅, Π²Π΅Ρ ΡΠ΅ ΠΎΡΠ»Π°ΡΠ° Π½Π° ΠΈΠ·ΡΠ·Π΅ΡΠΊΠ΅, Π½ΠΈΡΠΈ
ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π° Π΄ΡΠΆΠΈΠ½Ρ ΠΏΡΠΎΡΠΈΡΠ°Π½ΠΎΠ³ - ΠΌΠ°Π΄Π°, Π·Π° ΡΡ ΡΠ²ΡΡ
Ρ, ΠΌΠΎΠΆΠ΄Π° ΠΏΠΎΡΡΠΎΡΠΈ
stream.read(max_bytes)
.
Π‘ΡΡΡΠΈΠ½Π° ΡΠ΅ Π΄Π° ΡΠ΅ ΠΎ ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Ρ Π²ΡΠ»ΠΎ Π»Π°ΠΊΠΎ ΡΠ°Π·ΠΌΠΈΡΡΠ°ΡΠΈ ΠΈ Π΄ΠΎΠ½ΠΎΡΠΈΡΠΈ Π·Π°ΠΊΡΡΡΠΊΠ΅. ΠΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠ΅ ΠΎΡΠΈΠ³Π»Π΅Π΄Π½ΠΎ ΡΡΠ° (ΠΆΠ΅Π»ΠΈ Π΄Π°) ΡΠ°Π΄ΠΈ.
ΠΠ°Π·Π°Π΄ Ρ Π¦
Π₯Π°ΡΠ΄Π΅ Π΄Π° ΠΏΡΠΎΠ±Π°ΠΌΠΎ Π΄Π° ΡΡ Π²Π°ΡΠΈΠΌΠΎ βΠΎΡΠΊΡΠ΄ ΡΠ°Π² ΠΎΠ²Π°Ρ ΠΊΠΎΠ΄β. ΠΡΡΠΎΡ ΡΠ΅ Π±ΠΈΠΎ Ρ ΡΡΠ°ΡΡ ΡΠ²Π΅ΡΡΠΈ Π΄Π°, Ρ Π¦-Ρ, ΠΌΠΎΡΠ° Π΄Π° ΡΠ΅ Π²ΠΎΠ΄ΠΈ ΡΠ°ΡΡΠ½Π° ΠΎ Π½ΠΈΡΠΊΠ°ΠΌΠ° βΡΡΡΠ½ΠΎβ. Π¨ΡΠΎ ΠΈ ΡΠ΅ΡΡΠ΅ ΡΠ°ΡΠ½ΠΎ, Π°Π»ΠΈ Ρ ΡΡΠ²Π°ΡΠΈ Π½ΠΈΡΠ΅. ΠΠ°ΠΊΠ»Π΅, ΠΌΠΎΡΠ° Π΄Π° ΡΠ΅ Π²ΠΎΠ΄ΠΈ ΡΠ°ΡΡΠ½Π° ΡΡΡΠ½ΠΎ, Π°Π»ΠΈ Π½Π΅ ΠΌΠΎΡΠ° βΠ±Π°Ρ Π½Π° ΡΠ²Π°ΠΊΠΎΠΌ ΠΊΠΎΡΠ°ΠΊΡβ.
ΠΠ° Π²ΠΈΡΠ΅ΠΌ Π½ΠΈΠ²ΠΎΡ Π°ΠΏΡΡΡΠ°ΠΊΡΠΈΡΠ΅, ΠΎΠ²Π°Ρ ΠΊΠΎΠ΄ ΡΠ°Π΄ΠΈ ΡΠ»Π΅Π΄Π΅ΡΠ΅:
ΠΏΡΠΎΡΠΈΡΠ° (ΡΠ΅Π΄) ΠΈΠ· ΡΠΎΠΊΠ°
ΠΈΠ·ΡΠ°ΡΡΠ½Π° ΠΏΠΎΠ·ΠΈΡΠΈΡΡ Π·Π° ΠΠ£Π Π·Π½Π°ΠΊ (Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ Π½ΠΈΡΠΊΡ ΡΠ΅Π΄Π°)
Π°ΠΊΠΎ ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°Π½ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΊΠΎ, Π²ΡΠ°ΡΠ° ΠΠΠ£Π‘ΠΠΠ₯
ΡΡΠ°Π²ΡΠ° ΠΠ£Π Π·Π½Π°ΠΊ Ρ ΠΏΡΠΎΡΠΈΡΠ°Π½ ΡΠ΅Π΄ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ "ΠΏΡΠ°Π²Ρ Π½ΠΈΡΠΊΡ"
Π°ΠΊΠΎ ΡΠ΅ Π½ΠΈΡΠΊΠ° ΡΠ΅Π΄Π° ΡΠ΅Π΄Π½Π°ΠΊΠ° ΠΎΡΠ΅ΠΊΠΈΠ²Π°Π½ΠΎΡ Π²ΡΠ°ΡΠ° Π£Π‘ΠΠΠ₯
ΠΈΠ½Π°ΡΠ΅, Π²ΡΠ°ΡΠ° ΠΠΠ£Π‘ΠΠΠ₯
Π‘Π²Π΅ ΡΠ΅ ΡΠΎ Π»Π΅ΠΏΠΎ, Π°Π»ΠΈ, Π½Π΅ ΠΌΠΎΡΠ° ΡΠ²Π΅ ΡΠΎ Π΄Π° ΡΠ°Π΄ΠΈ. ΠΠ΅ΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π΅ Π·Π°
ΡΠ°ΡΡΠ½Π°ΡΠ΅ΠΌ, ΡΠ΅Ρ Π½Π΅ΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π΅ Π΄Π° Π·Π° βΠΏΡΠ°Π²ΠΎΠΌβ ΠΠ‘Π¦ΠΠΠ Π½ΠΈΡΠΊΠΎΠΌ. ΠΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΡΠ°
strcmp()
ΡΡΠ°ΡΠ΅ ΠΊΠΎΠ΄ ΠΏΡΠ²ΠΎΠ³ ΠΠ£Π Π·Π½Π°ΠΊΠ° ΠΈ Π½Π΅ΡΠ΅ Π±ΠΈΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ°Π²Π°Π½ΠΎ Π΄Π° Π»ΠΈ ΠΈ
Π΄ΡΡΠ³Π° Π½ΠΈΡΠΊΠ° ΠΈΠΌΠ° ΠΠ£Π Π·Π½Π°ΠΊ Π½Π° ΡΠΎΠΌ ΠΌΠ΅ΡΡΡ.
ΠΠ²Π°Ρ ΠΊΠΎΠ΄ ΡΠ΅ Π»ΠΎΡ ΠΈΠ· ΡΠΎΡ ΡΠ΅Π΄Π½ΠΎΠ³ ΡΠ°Π·Π»ΠΎΠ³Π°. ΠΠ΅ ΠΎΠ±ΡΠ°ΡΡΡΠ΅ Π³ΡΠ΅ΡΠΊΠ΅ ΠΈΠ·ΡΠΈΡΠΈΡΠΎ,
Π²Π΅Ρ ΡΡ ΠΎΠ±ΡΠ°Π΄Ρ βΠΊΡΠΈΡΠ΅β ΠΈΠ·Π° βΠ°ΠΊΠΎ ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°Π½ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΊΠΎβ. ΠΠ°ΠΈΠΌΠ΅,
read()
Π²ΡΠ°ΡΠ° -1
Ρ ΡΠ»ΡΡΠ°ΡΡ Π³ΡΠ΅ΡΠΊΠ΅, ΡΡΠΎ ΡΠ΅, ΡΠ²Π°ΠΊΠ°ΠΊΠΎ, ΠΏΡΠ΅ΠΊΡΠ°ΡΠΊΠΎ.
Π’Π°ΠΊΠΎ βΠΏΠ°ΠΌΠ΅ΡΠ°Π½β ΠΊΠΎΠ΄ ΡΠ΅ Π»ΠΎΡ, ΡΠ΅Ρ Π΄Π° Π±ΠΈ ΡΡΠ΅ Π·Π½Π°Π»ΠΈ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΎΠ²Π° ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΊΠ°, ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° Π·Π°ΠΊΡΡΡΡΡΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ βΠΎΠΊΡΡΠΆΠ΅ΡΠ΅β. ΠΠ΄Π½ΠΎΡΠ½ΠΎ, Π½ΠΈΡΠ΅ ΠΌΠΎΠ³ΡΡΠ΅ Π·Π°ΠΊΡΡΡΠΈΠ²Π°ΡΠΈ ΠΎ ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Ρ Π³Π»Π΅Π΄Π°ΡΡΡΠΈ ΡΠ°ΠΌΠΎ ΠΎΠ²Π°Ρ ΠΊΠΎΠ΄.
ΠΠΎΡΠ΅Π±Π½ΠΎ, Ρ ΡΠ»ΡΡΠ°ΡΡ Π½Π΅ΠΊΠΈΡ
ΠΏΡΠΎΠΌΠ΅Π½Π°, ΡΠ΅ΡΠΈΠΌΠΎ, Ρ Π½Π°ΡΠΈΠ½Ρ ΡΠ°Π΄Π° read()
, ΠΈΠ»ΠΈ
ΠΊΠ»ΠΎΠ½ΠΈΡΠ°ΡΡ ΠΎΠ²ΠΎΠ³ ΠΊΠΎΠ΄Π° Π·Π° ΡΠΏΠΎΡΡΠ΅Π±Ρ ΡΠ° Π½Π΅ΠΊΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΎΠΌ ΡΡΠΎΠ΄Π½ΠΎΠΌ read()
,
Π°Π»ΠΈ ΠΊΠΎΡΠ° ΠΈΠΏΠ°ΠΊ ΡΠ°Π΄ΠΈ ΠΌΠ°Π»ΠΎ Π΄ΡΡΠ³Π°ΡΠΈΡΠ΅, ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΊΠ΅ ΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅, ΠΈ
ΠΎΠ²Π°Ρ ΠΊΠΎΠ΄ ΡΠ΅ Π½Π°Π³Π»ΠΎ Π΄Π° Π·Π°Π³Π»ΡΠΏΠΈ.
ΠΠΎΠ±ΡΠΎ, Π΅Π²ΠΎ ΡΡΠ° ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° Π΄ΠΎΠ±ΠΈΡΠ΅ΠΌΠΎ Π½Π° ΠΎΡΠ½ΠΎΠ²Ρ Π΄ΠΎΡΠ°Π΄Π°ΡΡΠΈΡ Π·Π°ΠΊΡΡΡΠ°ΠΊΠ°:
int expect_string(int stream)
{
char line[1024];
int count = read(stream, line, sizeof line / sizeof line[0]);
if (count < 0) {
return FAILURE;
}
if (0 == strcmp(EXPECTED_STRING, line)) {
return SUCCESS;
}
else {
return FAILURE;
}
}
Π‘Π°Π΄ ΡΠ΅ ΡΠ°ΡΠ½ΠΎ Π²ΠΈΠ΄ΠΈ Π΄Π° Π½Π°Ρ Π½ΠΈΡΠ΅ Π±ΡΠΈΠ³Π° ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΠ΅ Π΄ΡΠ³Π°ΡΠΊΠ°
EXPECTED_STRING
, ΠΏΠ° ΠΏΡΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΠΌΠΎ ΠΊΠ°ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ΅Ρ,
ΡΠΈΠ½Π΅ΡΠΈ ΡΠ°ΠΌΡ ΡΡΠ½ΠΊΡΠΈΡΡ ΠΎΠΏΡΡΠΈΡΠΎΠΌ. Π£Π· ΠΏΠ°Ρ ΡΠΈΡΠ½ΠΈΡ
Π¦ ΡΡΠΈΠΊΠΎΠ²Π°, Π΄ΠΎΠ±ΠΈΡΠ°ΠΌΠΎ
Π·Π½Π°ΡΠ½ΠΎ ΠΊΡΠ°ΡΠ΅:
int expect_string(int stream, char const* expected)
{
char l[1024];
return ((read(stream, l, sizeof l / sizeof l[0]) > 0) &&
(0 == strcmp(expected, l))) ?
SUCCESS : FAILURE;
}
ΠΠ²Π΄Π΅ ΡΠ΅ ΠΏΡΠ΅Π»ΠΎΠΌ ΡΠ΅Π΄Π° ΠΏΡΠ°Π²ΡΠ΅Π½ Π½Π° 60 Π·Π½Π°ΠΊΠΎΠ²Π° ΡΠ°Π΄ΠΈ βΠΏΡΠ΅Π½ΠΎΡΠΈΠ²Π΅ ΡΠΈΡΡΠΈΠ²ΠΎΡΡΠΈβ.
ΠΠ»ΠΈ return
ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ°Π½Π΅ Ρ ΡΠ΅Π΄Π°Π½ ΡΠ΅Π΄, ΠΊΠΎΡΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΊΡΠ°ΡΠΈ Π°ΠΊΠΎ
βΠ·Π»ΠΎΡΠΏΠΎΡΡΠ΅Π±ΠΈΠΌΠΎβ Π½Π΅ΠΊΠ° ΡΠ°Π·Π½Π°ΡΠ° ΠΎ ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Ρ:
- ΠΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° Π΄ΡΠΆΠΈΠ½Π° ΡΠ΅Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° ΠΊΠΎΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠΏΠΎΡΡΠ΅Π±ΠΈ
SUCCESS == 0
ΠΈFAILURE == -1
, ΠΊΠ°ΠΊΠΎ ΡΠ΅ ΠΈ ΠΎΠ±ΠΈΡΠ°Ρ Ρ Π¦-Ρ
int expect_string(int sm, char const* ex)
{
char l[MAX_LINE_LEN];
return ((read(sm, l, MAX_LINE_LEN) > 0) && (0 == strcmp(ex, l))) - 1;
}
Π Π΅Π΄ ΡΠ΅ ΡΠ°Π΄ ΠΊΡΠ°ΡΠΈ ΠΎΠ΄ 80 Π·Π½Π°ΠΊΠΎΠ²Π°, ΡΡΠΎ ΡΠ΅ Π±ΠΈΠ»ΠΎ Ρ ΡΠ΅Π΄Ρ ΡΠ°ΠΊ ΠΈ Ρ Π΄ΠΎΠ±Π° ΠΠΠ‘-Π°.
ΠΠ²ΠΎ ΡΡ ΠΈ Π΄Π°ΡΠ΅ Π΄Π²Π° ΡΠ΅Π΄Π° ΠΊΠΎΠ΄Π°. ΠΠ΄ ΡΠΎΠ³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ±Π΅Π³Π½Π΅ Π°ΠΊΠΎ ΡΠΌΠΎ Ρ
ΡΠ΅Π΄Π½ΠΎ-Π½ΠΈΡΠ½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅ΡΡ, ΠΏΠ° ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° ΡΠΏΠΎΡΡΠ΅Π±ΠΈΠΌΠΎ ΠΏΠΎΡΡΠΎΡΠ΅ΡΠΈ static char
l[]
, ΠΈΠ»ΠΈ Π°ΠΊΠΎ ΡΠΌΠΎ ΡΠΏΡΠ΅ΠΌΠ½ΠΈ Π΄Π° ΠΆΡΡΠ²ΡΡΠ΅ΠΌΠΎ Π»Π°ΠΊΠΎΡΡ ΡΠΏΠΎΡΡΠ΅Π±Π΅:
int expect_string(int sm, char const* ex, char* ln, size_t max_len)
{
return ((read(sm, ln, max_len) > 0) && (0 == strcmp(ex, ln))) - 1;
}
Π‘Π°Π΄ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊ (ΠΎΠ½Π°Ρ ΠΊΠΎ ΠΏΠΎΠ·ΠΈΠ²Π°) ΠΌΠΎΡΠ° Π΄Π° Π·Π°ΡΠ·ΠΌΠ΅ Π½ΠΈΡΠΊΡ Π·Π° ΡΠ°Π΄Π½ΠΈ-ΠΏΠΎΠΌΠΎΡΠ½ΠΈ Π½ΠΈΠ· (ΡΠ΅Π΄) ΠΈ Π΄Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈ Π΄ΠΈΠΌΠ΅Π½Π·ΠΈΡΡ βΠ·Π°ΡΠ·Π΅ΡΠΎΡΡΠΈβ, ΡΡΠΎ ΡΠ΅ ΠΌΠ°Π»ΠΎ Π½Π΅ΠΏΡΠΈΡΠ°ΡΠ½ΠΎ.
ΠΠ»ΠΈ, ΠΈΠ°ΠΊΠΎ ΡΠ΅ ΠΎΠ²Π°Ρ ΡΠ΅Π΄ ΠΈΠΏΠ°ΠΊ Π½Π΅ΡΡΠΎ Π΄ΡΠΆΠΈ ΠΈ ΠΎΠΏΡΠΈΡΠ½ΠΈΡΠΈ ΠΎΠ΄ ΡΠ»ΠΈΡΠ½ΠΎΠ³ Ρ Π²ΠΈΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΎΠΌ ΡΠ΅Π·ΠΈΠΊΡ, ΠΎΠ½ ΠΎΠ±ΡΠ°ΡΡΡΠ΅ Π³ΡΠ΅ΡΠΊΠ΅ ΠΈΠ·ΡΠΈΡΠΈΡΠΎ (Π±Π΅Π· ΠΈΠ·ΡΠ΅ΡΠ°ΠΊΠ°, ΠΊΠΎΡΠΈ ΡΡ ΡΠΊΡΠΏΠΈ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°ΡΠΈΠ½Π°) ΠΈ Π½Π΅ Π·Π°ΡΠ·ΠΈΠΌΠ° ΠΈΠΊΠ°ΠΊΠ²Ρ ΠΌΠ΅ΠΌΠΎΡΠΈΡΡ (ΡΠ° Ρ ΡΠΏΠ΅), ΡΡΠΎ Π·Π½Π°ΡΠΈ Π΄Π° ΡΠ΅ Π·Π½Π°ΡΠ°ΡΠ½ΠΎ Π±ΡΠΆΠΈ.
Π¦++ ΡΡΠΈΠΊ ΡΠ° ΡΠΏΡΡΠ΅ΡΠ΅ΠΌ Π½Π° Π½ΠΈΠ· ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ
Π£ Π¦++ Π±ΠΈ Π±ΠΈΠ»ΠΎ ΠΎΡΠ΅ΠΈΠ²Π°Π½ΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ std::string
ΠΈ IOStreams, Π°Π»ΠΈ,
ΡΠ°ΡΠ²ΠΈΠΌ ΡΠ΅ Ρ ΡΠ΅Π΄Ρ Π΄Π° ΡΠ΅ ΠΎΡΡΠ°Π½Π΅ βΠ½ΠΈΡΠΊΠΎβ, Π°Π»ΠΈ ΠΈΠΏΠ°ΠΊ ΠΊΠΎΡΠΈΡΡΠ΅ Π½Π΅ΠΊΠ΅ ΠΎΠ»Π°ΠΊΡΠΈΡΠ΅,
ΠΏΠΎΠΏΡΡ ΠΎΠ²Π΅ ΠΊΠΎΡΠ° ΠΎΠ»Π°ΠΊΡΠ°Π²Π° ΡΠΏΠΎΡΡΠ΅Π±Ρ ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΡ ΠΊΠΎΡΠΈ ΠΈΠΌΠ° ΡΡΠ°ΡΠΈΡΠΊΠΈ Π·Π°ΡΠ·Π΅ΡΡ
Π½ΠΈΡΠΊΡ:
template <int N> inline
int expect_string(int sm, char const* ex, char (ln&)[N]) {
return ((read(sm, ln, N) > 0) && (0 == strcmp(ex, ln))) - 1;
}
ΠΠ°ΡΠ°Π²ΠΎΡΡΠ΅Π½ΠΈΡΠ΅
ΠΠΊΠΎ ΡΠ΅ ΠΏΠ°ΠΆΡΠ²ΠΈΠΎ ΡΠ°Π·ΠΌΠΈΡΠ»ΠΈ ΡΡΠ° ΡΠ΅ ΠΎΠ½ΠΎ ΡΡΠΎ Ρ ΠΎΡΠ΅ΠΌΠΎ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΠΌΠΎ Ρ Π½Π΅ΠΊΠΎΠΌ Π¦ ΠΊΠΎΠ΄Ρ, ΡΡΠΎ ΡΠ΅ Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°ΡΡ Π±ΠΈΠ»Π° ΠΎΠ±ΡΠ°Π΄Π° Π½Π΅ΠΊΠΈΡ Π½ΠΈΡΠΊΠΈ, ΠΌΠΎΠ³ΡΡΠ΅ ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΠΈ ΠΊΠΎΠ΄ ΠΊΠΎΡΠΈ ΡΠ°Π΄ΠΈ ΡΠ°ΠΌΠΎ ΠΎΠ½ΠΎ ΡΡΠΎ ΠΌΠΎΡΠ°. Π’Π°ΠΊΠ°Π² ΠΊΠΎΠ΄ ΡΠ΅ ΠΎΠ±ΠΈΡΠ½ΠΎ ΡΠ»ΠΈΡΠ½Π΅ ΡΠ»ΠΎΠΆΠ΅Π½ΠΎΡΡΠΈ ΠΈ ΠΎΠΏΡΠΈΡΠ½ΠΎΡΡΠΈ ΠΊΠ°ΠΎ ΠΊΠΎΠ΄ ΠΊΠΎΡΠΈ ΠΏΠΎΡΡΠΈΠΆΠ΅ ΠΈΡΡΠΎ Ρ Π²ΠΈΡΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΎΠΌ ΡΠ΅Π·ΠΈΠΊΡ, Π°Π»ΠΈ ΡΠ΅, Π°ΠΊΠΎ ΡΠ΅ ΠΈΡΠΏΡΠ°Π²Π½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½, Π±ΡΠΆΠΈ, ΠΊΠΎΡΠΈΡΡΠΈ ΠΌΠ°ΡΠ΅ ΡΠ΅ΡΡΡΠ°ΡΠ° ΠΈ ΠΈΠ·ΡΠΈΡΠΈΡΠΎ ΠΎΠ±ΡΠ°ΡΡΡΠ΅ Π³ΡΠ΅ΡΠΊΠ΅.