powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / open возвращает 0
15 сообщений из 15, страница 1 из 1
open возвращает 0
    #35708263
vlad2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
привет всем
fd=open("file.txt", O_RDWR);
open возвращает 0 ....

как такое может быть??
0 это ведь стандартный ввод....
а я открываю обычный файл, который в наличии.... права 666
...
Рейтинг: 0 / 0
open возвращает 0
    #35708287
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
покажите фрагмент кода и как вы проверяете, что там 0.
...
Рейтинг: 0 / 0
open возвращает 0
    #35708391
vlad2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
fd=open("file.txt", O_RDWR);
printf("fd:%d \n\r",fd);
...
Рейтинг: 0 / 0
open возвращает 0
    #35708476
vlad2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
меня фуукция которая открывает файл и обрабатывает его ....вызывается из другйо функции ....
которая обходит дерево каталогов и работает рекурсивно ....

может тут какой то замес...

самое интересное что первый найденный файл обрабатыватся нормально...а со вторым при попытке открыть 0 ...
...
Рейтинг: 0 / 0
open возвращает 0
    #35708546
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2010со вторым при попытке открыть 0 ...

Ну так может этот второй файл и есть консоль. Ты для контроля имя выведи...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
open возвращает 0
    #35708588
vlad2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

имя я естественно вывел там тоже, прям перед тем как файл открыть.....
все верно ...имя правильное....

да и потом обход дерева каталогов там идет не из корня.... из вложенной папки в /home
dev там не затрагивается никак
...
Рейтинг: 0 / 0
open возвращает 0
    #35708764
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
стандартный ввод можно так же как обычный дескриптор файла закрыть. после этого следующее открытие файла вполне может вернуть дескриптор с уже свободным номером 0.

если Вы специально не закрываете стандартный ввод, может быть он закрывается где-то по ошибке ? например из-за переполнения или перекрытия имени переменной - локальной переменной.


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
open возвращает 0
    #35708889
vlad2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у меня в программе close(); в одном месте всего вызывается.
там локальная переменная fd .... вроде косяков не должно быть.

Может если только из-за рекурсии.
Какие ниудь накладки....утечки...

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

если закрыть 0 ...а потом снова сделать open...
то по идее open() должен вернуть 0, он ведь возвращает минимальный из доступных
...
Рейтинг: 0 / 0
open возвращает 0
    #35709346
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2010 работает рекурсивно ....




Как вариант есть выход за пределы буфера при записи туда данных,
соответственно стек вызовов испорчен,
но не до такой степени что бы программа падала.
...
Рейтинг: 0 / 0
open возвращает 0
    #35711229
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2010 пишет:

> как такое может быть??
> 0 это ведь стандартный ввод....
> а я открываю обычный файл, который в наличии.... права 666

Это вы путаете с fopen. open - более низкоуровневая, возвращает
не индекс файла, а файловый декскриптор OS.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
open возвращает 0
    #35711517
vlad2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
vlad2010 пишет:

> как такое может быть??
> 0 это ведь стандартный ввод....
> а я открываю обычный файл, который в наличии.... права 666

Это вы путаете с fopen. open - более низкоуровневая, возвращает
не индекс файла, а файловый декскриптор OS.


что это я путаю то???
open возвращет дескриптор все правильно....
есть три заранее открытых дескриптора которые передаются процессу ... 0,1,2 - In, Out, Error
причем тут fopen то???
тут мне кажется вы немного запутались....
...
Рейтинг: 0 / 0
open возвращает 0
    #35712196
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2010 wrote:

> open возвращет дескриптор все правильно....
> есть три заранее открытых дескриптора которые передаются процессу ...
> 0,1,2 - In, Out, Error
> причем тут fopen то???

Вроде бы не напутал :

http://linux.die.net/man/3/stdin

[src C]
#include <stdio.h>
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;
[src]
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
open возвращает 0
    #35712199
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad2010 wrote:

> как такое может быть??
> 0 это ведь стандартный ввод....

ОК, какие у вас есть доказательства вышенаписанного ?
Насколько я помню, в CRTL есть массив объектов типа
FILE, первые три объекта с индексами 0, 1 и 2 и есть
соотв. stdin, stdout, stderr.

Но с FILE работают высокоуровневые функции CRTL типа
fopen, fclose etc. open - более низкоуровневая.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
open возвращает 0
    #35712242
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если перед этим был закрыт файловый дескриптор 0 - то open обязательно вернёт 0 - ибо возвращается наименьший файловый дескриптор. Таково соглашение - на этом построено, например, программирование конвейров (комбинацией close, pipe, dup)

Можно очень просто проверить - сделав, скажем, fstat на 0 и отловив ошибку/посмотрев что к чему
...
Рейтинг: 0 / 0
open возвращает 0
    #35713600
login_member
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
vlad2010 wrote:

> как такое может быть??
> 0 это ведь стандартный ввод....

ОК, какие у вас есть доказательства вышенаписанного ?
Насколько я помню, в CRTL есть массив объектов типа
FILE, первые три объекта с индексами 0, 1 и 2 и есть
соотв. stdin, stdout, stderr.

Но с FILE работают высокоуровневые функции CRTL типа
fopen, fclose etc. open - более низкоуровневая.


доказательства чего???
это в любом учебнике по unix ...
fopen возвращет указатель на структуру FILE

процесс унаследует 3 int-а ,3 дескриптора
0,1,2 их далее в программе можно использовать для read, write

авторFILE *fopen(const char *restrict filename, const char *restrict mode);

а дескрипторы возвращает более низкоуровневая как вы верно заметили ф-ция open

авторint open(const char *path, int oflag, ... );

http://www.opengroup.org/onlinepubs/000095399/functions/fopen.html
http://www.opengroup.org/onlinepubs/000095399/functions/open.html
вот почитайте

вы шутите чтоли так?
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / open возвращает 0
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]