LINUX.ORG.RU

open возвращает 0

 ,


0

1

Доброго времени суток! Хотел спросить, почему вызов open может возвращать 0. Насколько я помню, 1,2 - это stdin&stdout, т.е. open должна возвращать как минимум число 3.

if(green_file = open("greenfile.txt", O_WRONLY |O_CREAT |O_TRUNC,0777 )<0)
{
	critical_error("Ошибка открытия файла");
}

fprintf(stderr, "fd:%d\n", green_file);

fd выдает равный нулю. write при попытке записать в этот дескриптор возвращает -1.

Может ли это быть связано с тем, что открытие файла идет в одном из процессов, порожденных fork'ом?

Потому что это корректный номер файлового дескриптора. Если 0 свободен, значит stdin по какой-то причине закрыт

Harald ★★★★★ ()
Ответ на: комментарий от Harald

Спасибо за ответ! Не подскажете, почему тогда запись не осуществляется? Вроде права поставил, сам файл создается...

gwyllum ()

А если условие написать так:

if((green_file = open("greenfile.txt", O_WRONLY |O_CREAT |O_TRUNC,0777 )) < 0)

?

(см. дополнительные скобки вокруг присваивания)

Deleted ()
Ответ на: комментарий от gwyllum

Делай -Wall и запускай splint на весь свой код, это избавит от многих проблем.

true_admin ★★★★★ ()

У вас в green_file результат выполнения операции open_return_result<0, а не значение, возвращенное open().

andreyu ★★★★★ ()

классика. от этого пытаются защититься вынося значение вперёд.

типа

if (0 > (id = ))

if (NULL != (pointer = ))

хотя это имно снижает читаемость.

vtVitus ★★★★★ ()
Последнее исправление: vtVitus (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.