URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6956
[ Назад ]

Исходное сообщение
"Задачки интересные. И для ума, и для самопроверки."

Отправлено Arpo , 20-Ноя-07 08:59 
Вообщем решили открыть такой топик. Будем задават друг другу интересные задачи и вместе искать решения.

Ну вот например задача от angra "Как узнать текущее время при помощи ls".
Хотя ответ на этот вопрос есть в моем предидущем топике...
Я эту задачу привел просто для примера.

Спасибо надеюсь топик заинтересует многих....


Содержание

Сообщения в этом обсуждении
"Задачки интересные. И для ума, и для самопроверки."
Отправлено NuINu , 20-Ноя-07 09:34 
>Вообщем решили открыть такой топик. Будем задават друг другу интересные задачи и
>вместе искать решения.
>
>Ну вот например задача от angra "Как узнать текущее время при помощи
>ls".
>Хотя ответ на этот вопрос есть в моем предидущем топике...
>Я эту задачу привел просто для примера.
>
>Спасибо надеюсь топик заинтересует многих....

насчет чистого лс не знаю но можно бы так touch minicom.log; ls -l minicom.log
но лучше ls>/dev/null;date не знаю :)


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Arpo , 20-Ноя-07 09:42 
>[оверквотинг удален]
>>Ну вот например задача от angra "Как узнать текущее время при помощи
>>ls".
>>Хотя ответ на этот вопрос есть в моем предидущем топике...
>>Я эту задачу привел просто для примера.
>>
>>Спасибо надеюсь топик заинтересует многих....
>
>насчет чистого лс не знаю но можно бы так touch minicom.log; ls
>-l minicom.log
>но лучше ls>/dev/null;date не знаю :)

Не, нужно только одну комманду ls исползовать. Ладно подождем еще, если  никто не ответит напишу ответ.


"Задачки интересные. И для ума, и для самопроверки."
Отправлено unicsoid , 20-Ноя-07 10:03 
>Не, нужно только одну комманду ls исползовать.

1 способ: после логина на консоль (например tty1) сделать ls -l на /dev/tty1
2 способ: в домашней директории ls -l .. Напротив Вашего "домика" будет текущее время :)



"Задачки интересные. И для ума, и для самопроверки."
Отправлено Arpo , 20-Ноя-07 10:11 
>>Не, нужно только одну комманду ls исползовать.
>
>1 способ: после логина на консоль (например tty1) сделать ls -l на
>/dev/tty1
>2 способ: в домашней директории ls -l .. Напротив Вашего "домика" будет
>текущее время :)

Что касаетця первого способа, то это решение не универсально потомучто будет действително только на момент логина.
Насчет 2-го, если честно не очен понял его, если мойно попадробней.

На самом деле, хоть в этой задаче и спрашивается про ls, она должна проверить знания совсем в другой области.


"Задачки интересные. И для ума, и для самопроверки."
Отправлено unicsoid , 20-Ноя-07 11:10 
>Насчет 2-го, если честно не очен понял его, если мойно попадробней.

Ну выполните и посмотрите результат :) Куда уж подробней-то


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Arpo , 20-Ноя-07 11:13 
>>Насчет 2-го, если честно не очен понял его, если мойно попадробней.
>
>Ну выполните и посмотрите результат :) Куда уж подробней-то

[arpo@prod1:~] # ls -l ..
total 3056418
drwxr-xr-x   3 arpo     other        512 Oct 18 17:26 arpo

Ну и где тут текущяя дата??


"Задачки интересные. И для ума, и для самопроверки."
Отправлено unicsoid , 20-Ноя-07 11:22 
>>>Насчет 2-го, если честно не очен понял его, если мойно попадробней.
>>
>>Ну выполните и посмотрите результат :) Куда уж подробней-то
>
>[arpo@prod1:~] # ls -l ..
>total 3056418
>drwxr-xr-x   3 arpo     other  
>     512 Oct 18 17:26 arpo
>
>Ну и где тут текущяя дата?

Хм, надо було уточнить, что работает, когда у вас что-то пишется, скажем в .bash_history :)



"Задачки интересные. И для ума, и для самопроверки."
Отправлено Ray Dudu , 20-Ноя-07 10:26 
ls -l /proc/self
будет работать всегда

"Задачки интересные. И для ума, и для самопроверки."
Отправлено unicsoid , 20-Ноя-07 11:12 
>ls -l /proc/self
>будет работать всегда

0 ~ 11:10:02 moon
uni % ls -l /proc/self
lrwxrwxrwx 1 root root 64 2007-11-20 07:35 /proc/self -> 22049

Как видите, не всегда :)


"Задачки интересные. И для ума, и для самопроверки."
Отправлено CSX , 20-Ноя-07 10:10 

>Не, нужно только одну комманду ls исползовать. Ладно подождем еще, если  
>никто не ответит напишу ответ.

Под Linux можно примерно так

# ls /dev/core && ls -lu --time-style=full-iso /dev/core


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Arpo , 20-Ноя-07 10:16 
>
>>Не, нужно только одну комманду ls исползовать. Ладно подождем еще, если  
>>никто не ответит напишу ответ.
>
>Под Linux можно примерно так
>
># ls /dev/core && ls -lu --time-style=full-iso /dev/core

Ладно не будем тянуть, темболее что задача не моя.
Эта задача проверяет знания фаиловой системы /proc. Решение очень простое ls -e /proc/self.
Каждый процесс создает в /proc симлинк на папку с PID-ом в тойже /proc.

Ждем новых задач....


"Задачки интересные. И для ума, и для самопроверки."
Отправлено CSX , 20-Ноя-07 10:25 
>Ладно не будем тянуть, темболее что задача не моя.
>Эта задача проверяет знания фаиловой системы /proc. Решение очень простое ls -e
>/proc/self.
>Каждый процесс создает в /proc симлинк на папку с PID-ом в тойже
>/proc.
>
>Ждем новых задач....

Под фрей
# ls -e /proc/self
ls: illegal option -- e

Под центосом
# ls -e /proc/self
ls: invalid option -- e

Под  sun4v
# ls -e /proc/self
gls: invalid option -- e

Что имелось ввиду?


"Задачки интересные. И для ума, и для самопроверки."
Отправлено CSX , 20-Ноя-07 10:30 

>Что имелось ввиду?

Видимо ls -lu /proc/self


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Arpo , 20-Ноя-07 10:30 
>[оверквотинг удален]
>
>Под центосом
># ls -e /proc/self
>ls: invalid option -- e
>
>Под  sun4v
># ls -e /proc/self
>gls: invalid option -- e
>
>Что имелось ввиду?

Под solaris10
ls -e /proc/self lrwxrwxrwx   1 arpo     other          0 Nov 20 11:26:26 2007 /proc/self -> 12341

man ls
-e       The same as -l, except displays time to the second,
              and  with  one  format  for all files regardless of
              age: mmm dd hh:mm:ss yyyy.

Можете не исползовать -e это всеголиш для лучшего datestamp-а, возможно у вас в системе это опция -E....



"Задачки интересные. И для ума, и для самопроверки."
Отправлено Arpo , 20-Ноя-07 10:34 
Думаю задачу можно считать решонной. Ждем новых.....

"Задачки интересные. И для ума, и для самопроверки."
Отправлено CSX , 20-Ноя-07 10:42 
>Думаю задачу можно считать решонной. Ждем новых.....

http://www.opennet.me/openforum/vsluhforumID9/6957.html Чем не задачка? :)


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Arpo , 20-Ноя-07 10:47 
Задача то она задача, просто дело в том что если не знаеш ответ на задачу то это уже проблема, а в этом топике мы все таки решили обсуждать задачи...

З.Ы. Кстати я видел ваш топик, но ничего в голову не приходит...


"Задачки интересные. И для ума, и для самопроверки."
Отправлено CSX , 20-Ноя-07 10:52 
>Задача то она задача, просто дело в том что если не знаеш
>ответ на задачу то это уже проблема, а в этом топике
>мы все таки решили обсуждать задачи...
>
>З.Ы. Кстати я видел ваш топик, но ничего в голову не приходит...
>

Ну тогда. Боянчег.

$ rm *
bash: /bin/rm: Argument list too long

Как все же удалить файлы, не трогая (вообще) директорию.
Вариантов масса, попробуем найти лучший?


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Arpo , 20-Ноя-07 10:57 
>[оверквотинг удален]
>>З.Ы. Кстати я видел ваш топик, но ничего в голову не приходит...
>>
>
>Ну тогда. Боянчег.
>
>$ rm *
>bash: /bin/rm: Argument list too long
>
>Как все же удалить файлы, не трогая (вообще) директорию.
>Вариантов масса, попробуем найти лучший?

можно что-та типа find . -type f |xargs rm или find . -type f -exec rm {} \;


"Задачки интересные. И для ума, и для самопроверки."
Отправлено CSX , 20-Ноя-07 11:04 
>[оверквотинг удален]
>>Ну тогда. Боянчег.
>>
>>$ rm *
>>bash: /bin/rm: Argument list too long
>>
>>Как все же удалить файлы, не трогая (вообще) директорию.
>>Вариантов масса, попробуем найти лучший?
>
>можно что-та типа find . -type f |xargs rm или find .
>-type f -exec rm {} \;

Ну вот, не дали даже молодежи голову поломать =)
Хотя, если нет пробелов в именах файлов то можно делать даже проще
ls | xargs rm


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Arpo , 20-Ноя-07 11:07 
>[оверквотинг удален]
>>>Как все же удалить файлы, не трогая (вообще) директорию.
>>>Вариантов масса, попробуем найти лучший?
>>
>>можно что-та типа find . -type f |xargs rm или find .
>>-type f -exec rm {} \;
>
>Ну вот, не дали даже молодежи голову поломать =)
>Хотя, если нет пробелов в именах файлов то можно делать даже проще
>
>ls | xargs rm

Да я сам еще не особо стар:)
Ладно больше не буду:):)


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Arpo , 20-Ноя-07 11:09 
Еще одна задачка которую задал мне angra.
Почему find / -name a* может выдать разный набор файлов для разных пользователей, а иногда даже и для одного.

"Задачки интересные. И для ума, и для самопроверки."
Отправлено Doka , 21-Ноя-07 15:56 
старо ...
все зависит от того как шел раскроет
a*
это ведь не
"a*"

>Еще одна задачка которую задал мне angra.
>Почему find / -name a* может выдать разный набор файлов для разных
>пользователей, а иногда даже и для одного.


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Arpo , 21-Ноя-07 15:58 
>старо ...
>все зависит от того как шел раскроет
>a*
>это ведь не
>"a*"
>
>>Еще одна задачка которую задал мне angra.
>>Почему find / -name a* может выдать разный набор файлов для разных
>>пользователей, а иногда даже и для одного.

)точно..


"Задачки интересные. И для ума, и для самопроверки."
Отправлено phpcoder , 26-Ноя-07 12:36 
[..]
>>Как все же удалить файлы, не трогая (вообще) директорию.
>>Вариантов масса, попробуем найти лучший?
>
>можно что-та типа find . -type f |xargs rm или find .
>-type f -exec rm {} \;

Можно короче: find . -type f -delete


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Arpo , 26-Ноя-07 12:46 
>[..]
>>>Как все же удалить файлы, не трогая (вообще) директорию.
>>>Вариантов масса, попробуем найти лучший?
>>
>>можно что-та типа find . -type f |xargs rm или find .
>>-type f -exec rm {} \;
>
>Можно короче: find . -type f -delete

В Solaris-е не работает:(


"Задачки интересные. И для ума, и для самопроверки."
Отправлено DnK , 20-Ноя-07 12:09 
>Ну вот например задача от angra "Как узнать текущее время при помощи
>ls".

В Соляре при включенном Process Accounting:
ls -l /var/adm/pacct

>$ rm *
>bash: /bin/rm: Argument list too long
>Как все же удалить файлы, не трогая (вообще) директорию

Добавлю свои 5 копеек -)
for file in * ; do rm $file ;done


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Arpo , 20-Ноя-07 12:46 
>>Ну вот например задача от angra "Как узнать текущее время при помощи
>>ls".
>
>В Соляре при включенном Process Accounting:
>ls -l /var/adm/pacct
>

Тоже вариант, но он не у всех включен. У меня например нет.


"Задачки интересные. И для ума, и для самопроверки."
Отправлено DnK , 20-Ноя-07 13:28 
>>В Соляре при включенном Process Accounting:
>>ls -l /var/adm/pacct
>>
>Тоже вариант, но он не у всех включен. У меня например нет.
>

Так ведь вариант с /proc уже прозвучал - вот и пришлось проявить фантазию -))


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Arpo , 20-Ноя-07 14:24 
>>>В Соляре при включенном Process Accounting:
>>>ls -l /var/adm/pacct
>>>
>>Тоже вариант, но он не у всех включен. У меня например нет.
>>
>
>Так ведь вариант с /proc уже прозвучал - вот и пришлось проявить
>фантазию -))

)А у вас нету интересной задачки???


"Задачки интересные. И для ума, и для самопроверки."
Отправлено DnK , 20-Ноя-07 17:08 
>)А у вас нету интересной задачки???

Насчет интересности не уверен))
Вот кусочек вывода команды df -h :

Filesystem             size   used  avail capacity  Mounted on
[...]
/dev/vx/dsk/icsdg/ict
                       287G   137M   269G     1%    /ora/ICT
/dev/vx/dsk/icsdg/redo2
                       3.0G    18M   2.8G     1%    /ora/ICT/redo2
/dev/vx/dsk/icsdg/data
                        67G    82M    63G     1%    /ora/ICT/data
/dev/vx/dsk/icsdg/edr_index
                        44G    76M    41G     1%    /ora/ICT/edr_index
[...]

Почему $size - $used != $avail  ?


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Arpo , 21-Ноя-07 08:28 
>[оверквотинг удален]
> 67G    82M    63G  
>   1%    /ora/ICT/data
>/dev/vx/dsk/icsdg/edr_index
>            
>          
> 44G    76M    41G  
>   1%    /ora/ICT/edr_index
>[...]
>
>Почему $size - $used != $avail  ?

Какаято расница всегда есть, но тут странно....Посмотрим что скажут остальные...


"Задачки интересные. И для ума, и для самопроверки."
Отправлено idle , 21-Ноя-07 09:55 
>[оверквотинг удален]
> 67G    82M    63G  
>   1%    /ora/ICT/data
>/dev/vx/dsk/icsdg/edr_index
>            
>          
> 44G    76M    41G  
>   1%    /ora/ICT/edr_index
>[...]
>
>Почему $size - $used != $avail  ?

Потому что 8% зарезервировано за рутом. ufs-фича, afaik.
tunefs -p /


"Задачки интересные. И для ума, и для самопроверки."
Отправлено c4s , 23-Ноя-07 14:50 
-5% зарезервированые для суперпользователя.

>[оверквотинг удален]
> 67G    82M    63G  
>   1%    /ora/ICT/data
>/dev/vx/dsk/icsdg/edr_index
>            
>          
> 44G    76M    41G  
>   1%    /ora/ICT/edr_index
>[...]
>
>Почему $size - $used != $avail  ?


"Задачки интересные. И для ума, и для самопроверки."
Отправлено tux2002 , 20-Ноя-07 19:59 
Непонятки: почему у каталога рабоает sgid и не работает suid?

"Задачки интересные. И для ума, и для самопроверки."
Отправлено DnK , 21-Ноя-07 13:09 
>Потому что 8% зарезервировано за рутом. ufs-фича, afaik.

Верно.

>Непонятки: почему у каталога рабоает sgid и не работает suid?

Никакого ответа кроме: "Потому что" в голову не приходит :)


"Задачки интересные. И для ума, и для самопроверки."
Отправлено tux2002 , 22-Ноя-07 07:53 

>Никакого ответа кроме: "Потому что" в голову не приходит :)

А по логике я ожидал что будет :)


"Задачки интересные. И для ума, и для самопроверки."
Отправлено DnK , 22-Ноя-07 09:12 
>
>>Никакого ответа кроме: "Потому что" в голову не приходит :)
>
>А по логике я ожидал что будет :)

Хе, если по логике, то suid не работает потому что если он заработает, то ты не сможешь редактировать созданные тобой же файлы. А это нехорошо :)


"Задачки интересные. И для ума, и для самопроверки."
Отправлено tux2002 , 22-Ноя-07 12:18 
>>
>>>Никакого ответа кроме: "Потому что" в голову не приходит :)
>>
>>А по логике я ожидал что будет :)
>
>Хе, если по логике, то suid не работает потому что если он
>заработает, то ты не сможешь редактировать созданные тобой же файлы. А
>это нехорошо :)

Ну уж umask и вхождение в группу моё дело :)


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Arpo , 22-Ноя-07 12:20 
Я думал эта тема многих заинтересует.. что больше нету интересных вапросов??

"Задачки интересные. И для ума, и для самопроверки."
Отправлено DnK , 22-Ноя-07 12:33 
>>Хе, если по логике, то suid не работает потому что если он
>>заработает, то ты не сможешь редактировать созданные тобой же файлы. А
>>это нехорошо :)
>
>Ну уж umask и вхождение в группу моё дело :)

Так ведь дефолтный umask 022 ;)
Вообще вопрос странный :) Почему разработчики сделали так а не иначе. А почему светофор красно-зеленый а не оранжево-синий ?:)
Ладно уж, колись в чем наколка :)


"Задачки интересные. И для ума, и для самопроверки."
Отправлено tux2002 , 22-Ноя-07 14:49 
>>>Хе, если по логике, то suid не работает потому что если он
>>>заработает, то ты не сможешь редактировать созданные тобой же файлы. А
>>>это нехорошо :)
>>
>>Ну уж umask и вхождение в группу моё дело :)
>
>Так ведь дефолтный umask 022 ;)
>Вообще вопрос странный :) Почему разработчики сделали так а не иначе. А
>почему светофор красно-зеленый а не оранжево-синий ?:)
>Ладно уж, колись в чем наколка :)

Да никакой наколки, бит есть а не работает вот и всё :)



"Задачки интересные. И для ума, и для самопроверки."
Отправлено Arpo , 23-Ноя-07 13:18 
>[оверквотинг удален]
>>>
>>>Ну уж umask и вхождение в группу моё дело :)
>>
>>Так ведь дефолтный umask 022 ;)
>>Вообще вопрос странный :) Почему разработчики сделали так а не иначе. А
>>почему светофор красно-зеленый а не оранжево-синий ?:)
>>Ладно уж, колись в чем наколка :)
>
>Да никакой наколки, бит есть а не работает вот и всё :)
>

типа задал задачу а сам ответ не знаю....


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Romik , 23-Ноя-07 16:49 
-= Позволить одному пользователю менять пароль другого пользователя =-
(без использования su, sudo)
++++++++++++++++++
#!/bin/bash
passwd user2
++++++++++++++++++

Владелец скрипта - root, группа - user, установлен suid.
Файл запускает user2.

Почему это не сработает? ;)


"Задачки интересные. И для ума, и для самопроверки."
Отправлено idle , 23-Ноя-07 17:03 

>(без использования su, sudo)
>++++++++++++++++++
>#!/bin/bash
>passwd user2
>++++++++++++++++++
>
>Владелец скрипта - root, группа - user, установлен suid.
>Файл запускает user2.
>
>Почему это не сработает? ;)

Наверное потому-что passwd сам с битом suid.


"Задачки интересные. И для ума, и для самопроверки."
Отправлено CSX , 23-Ноя-07 17:15 
>[оверквотинг удален]
>>#!/bin/bash
>>passwd user2
>>++++++++++++++++++
>>
>>Владелец скрипта - root, группа - user, установлен suid.
>>Файл запускает user2.
>>
>>Почему это не сработает? ;)
>
>Наверное потому-что passwd сам с битом suid.

Даже если снять не заработает. Хотя  под OpenBSD заработает, если мне память не изменяет =)
Решение вот: "Due to the increased likelihood of security flaws, many operating systems ignore the setuid attribute when applied to executable shell scripts."


"Задачки интересные. И для ума, и для самопроверки."
Отправлено angra , 23-Ноя-07 18:15 
Скорее всего не только shell, но и вообще для всех скриптов, то есть небинарных исполнимых файлов. Переходить или не переходить в другой uid зависит от интерпретатора, например если установлен perl-suid, то перловый скрипт будет реагировать на suid, в противном случае - нет.


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Ray Dudu , 28-Ноя-07 17:42 
#include <stdio.h>
#include <stdlib.h>

int main(void){
   int i=2;
   if(-10 * abs(i - 1) == 10 * abs(i - 1)){
       printf("OMG,-10==10 in linux!\n");
   } else {
       printf("nothing special here\n");
   }
   return 0;
}

Вопрос: почему так происходить в линуксе?


"Задачки интересные. И для ума, и для самопроверки."
Отправлено f00l , 30-Ноя-07 09:40 
>   if(-10 * abs(i - 1) == 10 * abs(i - 1)){
>Вопрос: почему так происходить в линуксе?

В даном случаи есть понятие не определенность при компиляции. Разработчики могут на свое усмотрение вычислять в разной последовательности, даже в стандарте на компилятор указано что пока нет точки с запитой  значение переменных не определено и может быть любое и только  после точки с запитой выражение определено.

Если четко определить последовательность то все работает правильно:
int i = 2;
int k,l;

k = abs(i - 1);
k = -10 * k;
l =  abs(i - 1);
l = 10 * l;


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Ray Dudu , 03-Дек-07 11:45 
>>   if(-10 * abs(i - 1) == 10 * abs(i - 1)){

вот например: printf("%d %d %d\n", i++, i++, i++) - тут неорпределенность о которой вы говорили. а вышеприведенном выражении умножение константы на вызов ф-и, какая же тут неопределенность.

З.Ы. причем результат не зависит ни от значения i ни от замены 10и на любое другое число.


"Задачки интересные. И для ума, и для самопроверки."
Отправлено f00l , 03-Дек-07 16:35 
>>>   if(-10 * abs(i - 1) == 10 * abs(i - 1)){
>
>вот например: printf("%d %d %d\n", i++, i++, i++) - тут неорпределенность о
>которой вы говорили. а вышеприведенном выражении умножение константы на вызов ф-и,
>какая же тут неопределенность.
>
>З.Ы. причем результат не зависит ни от значения i ни от замены
>10и на любое другое число.

Самое интересное вот что получается при компиляции
gcc -Wall -O -c inet.c
//inet.c
int main(void)
{
  int i=2;
  int i0,i1;
  if( ((-10) * (abs(i - 1))) == (10 * (abs(i - 1)))){
    printf("OMG,-10==10 in linux!\n");
  }
  else {
    printf("nothing special here\n");
  }
  return 0;
}

// init.s
.file   "inet.c"
.section    .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "OMG,-10==10 in linux!"
.text
.globl main
.type   main, @function
main:
     pushl   Кp
     movl    %esp, Кp
     subl    $8, %esp
     andl    $-16, %esp
     subl    $28, %esp
     pushl   $.LC0
     call    puts
     addl    $16, %esp
     movl    $0, Йx
     leave
     ret
.size   main, .-main
.section    .note.GNU-stack,"",@progbits
.ident  "GCC: (GNU) 3.4.1 (Mandrakelinux 10.1 3.4.1-4mdk)"

здесь видно что даже строки которая отвечает за вывод альтернативы нет.
Значит при проходи компилятора он решил что она не нужна!!
Значит уже на этапе компиляции принято решение что -10==10.

А вот что получается когда компилируеш с такими  же опциями
// inet.c
int main(void)
{
  int i=2;
  int i0,i1;
  i0 = abs(i - 1);
  i0 = -10 * i0;
  i1 =  abs(i - 1);
  i1 = 10 * i1;
  if(i0 == i1){
    printf("OMG,-10==10 in linux!\n");
  }
  else {
    printf("nothing special here\n");
  }
  return 0;
}
//inet.s
.file   "inet.c"
.section    .rodata.str1.1,"aMS",@progbits,1
.LC1:
.string "nothing special here"
.text
.globl main
.type   main, @function
main:
   pushl   Кp
   movl    %esp, Кp
   subl    $8, %esp
   andl    $-16, %esp
   subl    $28, %esp
   pushl   $.LC1
   call    puts
   addl    $16, %esp
   movl    $0, Йx
   leave
   ret
.size   main, .-main
.section    .note.GNU-stack,"",@progbits
.ident  "GCC: (GNU) 3.4.1 (Mandrakelinux 10.1 3.4.1-4mdk)"

И опять решение о сравнении находится на этапе компиляции.

Видно что сам компилятор игнорирует функцию abs. Только сейчас обратил внимание.
Может у кого-то еще будут предложения. Пока у меня ответа нет.


"Задачки интересные. И для ума, и для самопроверки."
Отправлено tux2002 , 04-Дек-07 14:34 
Интересно что -10*abs(1-i) = 10 :)

"Задачки интересные. И для ума, и для самопроверки."
Отправлено tux2002 , 04-Дек-07 14:36 
Тьфу -10


"Задачки интересные. И для ума, и для самопроверки."
Отправлено Андрей , 04-Дек-07 08:18 
>Вопрос: почему так происходить в линуксе?

Это не в линуксе так происходит, а в gcc.

man abs - GCC handles abs() and labs() as builtin functions.

видимо в gcc abs определена как unsigned int abs (int) и соответственно всё приводится к unsigned.

$ uname -a
Linux trantor 2.6.22-gentoo-r8 #1 SMP PREEMPT Fri Sep 28 23:15:32 EDT 2007 i686 AMD Athlon(tm) 64 X2 Dual Core Processor 3800+ AuthenticAMD GNU/Linux

$ gcc -Wall -fno-builtin  -o test test.c
$ ./test
nothing special here

$ gcc -Wall -o test test.c
$ ./test
OMG,-10==10 in linux!



"Задачки интересные. И для ума, и для самопроверки."
Отправлено Ray Dudu , 05-Дек-07 13:04 
это был баг в ЖЦЦ.
This is a bug of gcc which was recently fixed.
http://www.nabble.com/-PATCH--Fix-PR34130,-extract_muldiv-broken-t4826688.html
http://gcc.gnu.org/viewcvs?view=rev&revision=130258

If you use -fno-builtin option, you can avoid this bug.

задачку можно считать решенной, если так можно сказать.