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

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

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

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

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

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

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

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


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

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

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

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




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

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

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

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

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


что это я путаю то???
open возвращет дескриптор все правильно....
есть три заранее открытых дескриптора которые передаются процессу ... 0,1,2 - In, Out, Error
причем тут fopen то???
тут мне кажется вы немного запутались....
...
Рейтинг: 0 / 0
12.12.2008, 21:58:02
    #35712196
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open возвращает 0
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
12.12.2008, 22:02:07
    #35712199
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open возвращает 0
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
12.12.2008, 22:52:39
    #35712242
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open возвращает 0
Если перед этим был закрыт файловый дескриптор 0 - то open обязательно вернёт 0 - ибо возвращается наименьший файловый дескриптор. Таково соглашение - на этом построено, например, программирование конвейров (комбинацией close, pipe, dup)

Можно очень просто проверить - сделав, скажем, fstat на 0 и отловив ошибку/посмотрев что к чему
...
Рейтинг: 0 / 0
15.12.2008, 00:22:25
    #35713600
login_member
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
open возвращает 0
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
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / open возвращает 0 / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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