Задачка про Юникс и Си
Mar. 8th, 2008 11:47 pmВот задача про Юникс и Си, её придумал пользователь
avysk, а я слегка модифицировал.
Написать на Си коротенькую программу, которая при вызове через конвейер выдаёт фразу "Hello, world!\n", а при вызове с командной строки выдаёт ту же строку, но не один, а два раза.
Короче, вот так:
$ my_prog
Hello, world!
Hello, world!
$ my_prog | cat -
Hello, world!
$
Конечно есть функция isatty, с помощью которой можно просто проверить, запущена ли программа с терминала, вот так:
if(isatty(1))...else...;
Поэтому дополнительное условие: этой функцией (или подобными ей) пользоваться нельзя.
И вот что интересно - пользователь
ilya_dogolazky запостил очень похожую задачу.
Похожую, да решающуюся несколько иначе, хоть и непросто найти отличия в условии.
Написать на Си коротенькую программу, которая при вызове через конвейер выдаёт фразу "Hello, world!\n", а при вызове с командной строки выдаёт ту же строку, но не один, а два раза.
Короче, вот так:
$ my_prog
Hello, world!
Hello, world!
$ my_prog | cat -
Hello, world!
$
Конечно есть функция isatty, с помощью которой можно просто проверить, запущена ли программа с терминала, вот так:
if(isatty(1))...else...;
Поэтому дополнительное условие: этой функцией (или подобными ей) пользоваться нельзя.
И вот что интересно - пользователь
Похожую, да решающуюся несколько иначе, хоть и непросто найти отличия в условии.
no subject
on 2008-03-09 01:19 am (UTC)no subject
on 2008-03-09 01:26 am (UTC)no subject
on 2008-03-09 01:32 am (UTC)no subject
on 2008-03-09 01:38 am (UTC)no subject
on 2008-03-09 02:00 am (UTC)А, здорово! Я вот немножко подсократил, так что получилось 4 «существенных» строчки - http://codepad.org/hh15AzmC
Если хотите можете подумать, как обойтись лишь двумя принтф"ами и ещё одним дополнительным вызовом некой функции (сразу скажу, что получится не слишком переносимо, но просто считайте, что запускаем под линуксом и всё тогда будет окей).
[если Вы ещё не спите и если не сложно, потрите пожалуйста коммент про волшебное слово на букву «с», а то с утра народ подтянется, его увидит и расстроится. А уж в ссылки с готовыми решениями никто случайно не ткнёт :-) ]
no subject
on 2008-03-09 02:02 am (UTC)no subject
on 2008-03-09 02:04 am (UTC)no subject
on 2008-03-09 09:56 am (UTC)no subject
on 2008-03-09 09:20 am (UTC)no subject
on 2008-03-09 10:48 am (UTC)