The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Стандартные потоки ввода/вывода в UNIX/Linux, opennews (??), 14-Июл-09, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


4. "Стандартные потоки ввода/вывода в UNIX/Linux"  +1 +/
Сообщение от xguru (?), 14-Июл-09, 19:46 
>я лучше POSIX[1] почитаю. В этой статье даже не упоминается простой способ
>избавиться от нежелательного вывода/ввода путем *закрытия* дескриптора. Напр,
>    $ ls >&- 2>&-
>
>А также, что `команда >&файл' и `команда1 |& команда2' являются расширением в tcsh, bash, zsh и отсутствует в ash (almquist shell) и posix shell'е.
>
>[1] http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_...
>&- нормальная вещь, спасибо,

но как по мне, неправильно использовать >&- там, где логичнее использовать > /dev/null

Сравните

ls >&-

и

ls > /dev/null

Ответить | Правка | Наверх | Cообщить модератору

6. "Стандартные потоки ввода/вывода в UNIX/Linux"  +/
Сообщение от аноним (?), 14-Июл-09, 19:51 
Это уже дело вкуса. С одной стороны, зачем писать, если можно не писать? Это аргумент за >&-. Ведь devfs может быть вообще не смонтирован (в chroot/jail например). Кроме того, так короче.
С другой стороны, /dev/null нагляднее и проще понять где /dev/null заменить на не /dev/null.
Я в общем всецело за /dev/null.
Ответить | Правка | Наверх | Cообщить модератору

7. "Стандартные потоки ввода/вывода в UNIX/Linux"  +/
Сообщение от xguru (?), 14-Июл-09, 20:01 
>Это уже дело вкуса. С одной стороны, зачем писать, если можно не писать? Это аргумент за >&-. Ведь devfs может быть вообще не смонтирован (в chroot/jail например). Кроме того, так короче.
>С другой стороны, /dev/null нагляднее и проще понять где /dev/null заменить на
>не /dev/null.
>Я в общем всецело за /dev/null.

Дело не в том даже, а в том, что когда вы используете >&-,
то в общем случае добавляется ещё одна ошибка в поток:

$ ls >&-
ls: write error: Bad file descriptor

Ответить | Правка | Наверх | Cообщить модератору

10. "Стандартные потоки ввода/вывода в UNIX/Linux"  +/
Сообщение от аноним (?), 14-Июл-09, 22:35 
Нет.

% ls >&-
%

Ответить | Правка | Наверх | Cообщить модератору

13. "Стандартные потоки ввода/вывода в UNIX/Linux"  +/
Сообщение от xguru (?), 14-Июл-09, 22:48 
>Нет.
>
>% ls >&-
>%

А скажите, пожалуйста, какая ось у вас?

У меня на GNU/Linux:

% ls >&-
ls: write error: Bad file descriptor
book% bash
$ ls >&-
ls: write error: Bad file descriptor


Ответить | Правка | Наверх | Cообщить модератору

14. "Стандартные потоки ввода/вывода в UNIX/Linux"  +/
Сообщение от Аноним (-), 15-Июл-09, 00:18 
> $ ls >&-
> ls: write error: Bad file descriptor

на FreeBSD все пучком - нет ошибки.
    $ ls >&-
    $
Linux'у такое поведение с ошибкой можно было б простить, если бы сия функция не была одной из базовых в posix shell'е.

Ответить | Правка | Наверх | Cообщить модератору

16. "Стандартные потоки ввода/вывода в UNIX/Linux"  +/
Сообщение от Аноним (-), 15-Июл-09, 00:23 
>Linux'у такое поведение с ошибкой можно было б простить, если бы сия
>функция не была одной из базовых в posix shell'е.

кроме того это проблема не bash'а, а GNU ls.

Ответить | Правка | Наверх | Cообщить модератору

19. "Стандартные потоки ввода/вывода в UNIX/Linux"  +/
Сообщение от anonymous_peer (ok), 15-Июл-09, 03:04 
>>Linux'у такое поведение с ошибкой можно было б простить, если бы сия
>>функция не была одной из базовых в posix shell'е.
>
>кроме того это проблема не bash'а, а GNU ls.

А почему это проблема ls? Разве не у каждой программы ДОЛЖНЫ быть открыты дескрипторы 0, 1 и 2 при её запуске?

Ответить | Правка | Наверх | Cообщить модератору

21. "Стандартные потоки ввода/вывода в UNIX/Linux"  +/
Сообщение от xguru (?), 15-Июл-09, 10:39 
Ну не проблема, а скорее особенность.

По крайней мере это именно из-за ls (ну и других прог, потому что не только ls так себя ведёт, а многое гнутое из того, что я проверил).

Проблема ли это или не проблема, сложно сказать.

По крайней мере, он бы мог тупо забивать
и пользователю оставалось бы только догадываться,
закрыт дескриптор или нет.

Вот как здесь:


#include<stdio.h>

main()
{
    printf("opennet rulez\n");
    fprintf(stderr, "opennet rulez (stderr)\n");
}

$ gcc -o /tmp/h h.c
$ /tmp/h
opennet rulez
opennet rulez (stderr)
$ /tmp/h >&-
opennet rulez (stderr)
$

Но он заботится о пользователе
и ставит его в курс дела.

Ответить | Правка | Наверх | Cообщить модератору

28. "Стандартные потоки ввода/вывода в UNIX/Linux"  +/
Сообщение от anonymous_peer (ok), 16-Июл-09, 18:49 
Ну, это же хорошо! Лишняя проверка не повредит, а вот её отсутсвие — потенциальный баг в программе.
Ответить | Правка | Наверх | Cообщить модератору

31. "Стандартные потоки ввода/вывода в UNIX/Linux"  +/
Сообщение от xguru (?), 16-Июл-09, 21:42 
>Ну, это же хорошо! Лишняя проверка не повредит, а вот её отсутсвие
>— потенциальный баг в программе.

Мне вот интересно,
ls и проч. вылетает,
когда видит, что STDOUT закрыт,
или продолжает работать,
просто ошибку выводит?

Наверное, вылетает

Ответить | Правка | Наверх | Cообщить модератору

32. "Стандартные потоки ввода/вывода в UNIX/Linux"  +/
Сообщение от anonymous_peer (ok), 17-Июл-09, 02:21 
>Мне вот интересно,
>ls и проч. вылетает,
>когда видит, что STDOUT закрыт,
>или продолжает работать,
>просто ошибку выводит?
>
>Наверное, вылетает

Во-первых, что значит «вылетает»? Завершается раньше времени (но по собственному желанию) или убивается системой (то есть получает сигнал, от которого умирает)?

Да и если ls не убивается, то что ему дальше делать-то? В любом случае завершится.

У меня (GNU) ls >&- возвращает 2, значит, завершается самостоятельно. И, потом, было бы странно сначала проверить stdout на возможность вывода, сообщить о том, что он закрыт, а дальше, несмотря на это, что-то сделать так, чтобы тебя убили.

Ответить | Правка | Наверх | Cообщить модератору

18. "Стандартные потоки ввода/вывода в UNIX/Linux"  +/
Сообщение от аноним (?), 15-Июл-09, 02:31 
FreeBSD
Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

23. "+1 / Если не видно разницы?"  +/
Сообщение от Andrey Mitrofanov (?), 15-Июл-09, 12:05 
>Сравните

$ /bin/echo 'Ага.' >&- && echo "Таки-ага." || echo 'Не-а!'
/bin/echo: ошибка записи: Bad file descriptor
Не-а!
$ /bin/echo 'Ага.' > /dev/null && echo "Таки-ага." || echo 'Не-а!'
Таки-ага.
$ _

Ответить | Правка | К родителю #4 | Наверх | Cообщить модератору

24. "уй-ё... опять _они_"  +/
Сообщение от Andrey Mitrofanov (?), 15-Июл-09, 12:28 
И эти люди запрещают мне^W^Wрассказывают о кроссплатформенности, переносимоти, позиксвейности и не-баш-измости... http:/openforum/vsluhforumID3/47017.html#7

И ведь каждый раз одно, блин, и то же: "-Вы в шеле? -Нет, мы в шеле! -А, я думал, вы в шеле..."

Ответить | Правка | Наверх | Cообщить модератору

30. "уй-ё... опять _они_"  +/
Сообщение от xguru (?), 16-Июл-09, 21:41 
>И эти люди запрещают мне^W^Wрассказывают о кроссплатформенности, переносимоти, позиксвейности и не-баш-измости... http:/openforum/vsluhforumID3/47017.html#7
>
>
>И ведь каждый раз одно, блин, и то же: "-Вы в шеле?
>-Нет, мы в шеле! -А, я думал, вы в шеле..."

_ОНИ_ это кто?
Я, наверное, пропустил какую-то жестокую тему

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру