Как перенаправить стандартный вывод ошибок куда-нибудь?

Модератор: Модераторы разделов

Ответить
монах Тук
Сообщения: 78
ОС: XP 32 SP3

Как перенаправить стандартный вывод ошибок куда-нибудь?

Сообщение монах Тук »

Друзья!

Код: Выделить всё

//main.cpp
#include <stdio.h>
int main ()
{
  int temp= 0;
  printf ("%d\n", 5/temp);
}



Код: Выделить всё

root@serimahosta:~# g++ main.cpp -o main.exe
root@serimahosta:~# ./main.exe 2> /dev/null
Исключение в операции с плавающей точкой
root@serimahosta:~#

Как видите, ообщение об ошибке, а именно "Исключение в операции с плавающей точкой" не перенаправляется в /dev/null (не исчезает): та же проблема при перенавпрвлении стандартного вывода ошибок в обыкновеный файл. ЧЯДНТ? Спасибо кто откликнется

Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как перенаправить стандартный вывод ошибок куда-нибудь?

Сообщение Bizdelnick »

Это сообщение не от программы, а от самого шелла, означающее, что процесс был убит SIGFPE.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
монах Тук
Сообщения: 78
ОС: XP 32 SP3

Re: Как перенаправить стандартный вывод ошибок куда-нибудь?

Сообщение монах Тук »

Bizdelnick писал(а):
05.02.2016 22:54
Это сообщение не от программы, а от самого шелла, означающее, что процесс был убит SIGFPE.
я так и думал. А как ошибку сгенерировать?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как перенаправить стандартный вывод ошибок куда-нибудь?

Сообщение Bizdelnick »

монах Тук писал(а):
05.02.2016 21:59
ЧЯДНТ?

Ппишете код на чистейшем C, но компилируете его как C++; используете для сомнительных экспериментов учётную запись root.

монах Тук писал(а):
05.02.2016 22:55
А как ошибку сгенерировать?

Что значит — сгенерировать ошибку? Если хотите вывести сообщение об ошибке, то пишите его в stderr, например

Код: Выделить всё

fputs("error\n", stderr);
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
yoshakar
Сообщения: 259
ОС: Debian Stretch

Re: Как перенаправить стандартный вывод ошибок куда-нибудь?

Сообщение yoshakar »

Bizdelnick писал(а):
05.02.2016 23:00
используете int там, где согласно формату должен быть double
Если вы про %d, то %d это как раз int, с этим всё нормально.

монах Тук писал(а):
05.02.2016 21:59
ЧЯДНТ?
Вы делите на ноль. На целочисленный ноль делить нельзя.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как перенаправить стандартный вывод ошибок куда-нибудь?

Сообщение Bizdelnick »

yoshakar писал(а):
06.02.2016 11:09
%d это как раз int

Да, что-то я мозг отключил по случаю конца рабочей недели...
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
MiK13
Сообщения: 1164
ОС: Linux Debian

Re: Как перенаправить стандартный вывод ошибок куда-нибудь?

Сообщение MiK13 »

Код: Выделить всё

#include <stdio.h>
int main ()
{
  int temp= 0;
  printf ("%d\n", 5/temp);
}


Код: Выделить всё

root@serimahosta:~# ./main.exe 2> /dev/null
Исключение в операции с плавающей точкой
root@serimahosta:~#

У меня по поводу этого примера возник другой вопрос.
temp объявлена как int
Константа 5 тоже int
В языке C, НЯЗ, результат от деления int на int тоже int (в отличие от языка Pascal)
Почему выдаётся сообщение "Исключение в операции с плавающей точкой" ?
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Как перенаправить стандартный вывод ошибок куда-нибудь?

Сообщение NickLion »

MiK13 писал(а):
25.03.2016 11:02
У меня по поводу этого примера возник другой вопрос.

Почему выдаётся сообщение "Исключение в операции с плавающей точкой" ?

Потому что сигнал SIGFPE де-факто используется как для ошибок арифметики в операциях с плавающей точкой, так и в целочисленных, но дословно означает SIGnal: Floating-Point Exception.
Спасибо сказали:
Ответить