|
|
|
open возвращает 0
|
|||
|---|---|---|---|
|
#18+
привет всем fd=open("file.txt", O_RDWR); open возвращает 0 .... как такое может быть?? 0 это ведь стандартный ввод.... а я открываю обычный файл, который в наличии.... права 666 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 14:25:47 |
|
||
|
open возвращает 0
|
|||
|---|---|---|---|
|
#18+
покажите фрагмент кода и как вы проверяете, что там 0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 14:34:26 |
|
||
|
open возвращает 0
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 15:05:25 |
|
||
|
open возвращает 0
|
|||
|---|---|---|---|
|
#18+
меня фуукция которая открывает файл и обрабатывает его ....вызывается из другйо функции .... которая обходит дерево каталогов и работает рекурсивно .... может тут какой то замес... самое интересное что первый найденный файл обрабатыватся нормально...а со вторым при попытке открыть 0 ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 15:31:28 |
|
||
|
open возвращает 0
|
|||
|---|---|---|---|
|
#18+
vlad2010со вторым при попытке открыть 0 ... Ну так может этот второй файл и есть консоль. Ты для контроля имя выведи... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 15:48:08 |
|
||
|
open возвращает 0
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, имя я естественно вывел там тоже, прям перед тем как файл открыть..... все верно ...имя правильное.... да и потом обход дерева каталогов там идет не из корня.... из вложенной папки в /home dev там не затрагивается никак ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 15:58:36 |
|
||
|
open возвращает 0
|
|||
|---|---|---|---|
|
#18+
стандартный ввод можно так же как обычный дескриптор файла закрыть. после этого следующее открытие файла вполне может вернуть дескриптор с уже свободным номером 0. если Вы специально не закрываете стандартный ввод, может быть он закрывается где-то по ошибке ? например из-за переполнения или перекрытия имени переменной - локальной переменной. -- „Истина — это вовсе не то, что можно убедительно доказать, это то, что делает всё проще и понятнее“ — Антуан де Сент-Экзюпери ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 16:46:06 |
|
||
|
open возвращает 0
|
|||
|---|---|---|---|
|
#18+
у меня в программе close(); в одном месте всего вызывается. там локальная переменная fd .... вроде косяков не должно быть. Может если только из-за рекурсии. Какие ниудь накладки....утечки... Но память динамическая не используется в программе ни одного malloc Программа достаточно простая... если закрыть 0 ...а потом снова сделать open... то по идее open() должен вернуть 0, он ведь возвращает минимальный из доступных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 17:18:47 |
|
||
|
open возвращает 0
|
|||
|---|---|---|---|
|
#18+
vlad2010 работает рекурсивно .... Как вариант есть выход за пределы буфера при записи туда данных, соответственно стек вызовов испорчен, но не до такой степени что бы программа падала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2008, 21:08:33 |
|
||
|
open возвращает 0
|
|||
|---|---|---|---|
|
#18+
vlad2010 пишет: > как такое может быть?? > 0 это ведь стандартный ввод.... > а я открываю обычный файл, который в наличии.... права 666 Это вы путаете с fopen. open - более низкоуровневая, возвращает не индекс файла, а файловый декскриптор OS. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 15:17:29 |
|
||
|
open возвращает 0
|
|||
|---|---|---|---|
|
#18+
MasterZiv vlad2010 пишет: > как такое может быть?? > 0 это ведь стандартный ввод.... > а я открываю обычный файл, который в наличии.... права 666 Это вы путаете с fopen. open - более низкоуровневая, возвращает не индекс файла, а файловый декскриптор OS. что это я путаю то??? open возвращет дескриптор все правильно.... есть три заранее открытых дескриптора которые передаются процессу ... 0,1,2 - In, Out, Error причем тут fopen то??? тут мне кажется вы немного запутались.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 16:19:06 |
|
||
|
open возвращает 0
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 21:58:02 |
|
||
|
open возвращает 0
|
|||
|---|---|---|---|
|
#18+
vlad2010 wrote: > как такое может быть?? > 0 это ведь стандартный ввод.... ОК, какие у вас есть доказательства вышенаписанного ? Насколько я помню, в CRTL есть массив объектов типа FILE, первые три объекта с индексами 0, 1 и 2 и есть соотв. stdin, stdout, stderr. Но с FILE работают высокоуровневые функции CRTL типа fopen, fclose etc. open - более низкоуровневая. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 22:02:07 |
|
||
|
open возвращает 0
|
|||
|---|---|---|---|
|
#18+
Если перед этим был закрыт файловый дескриптор 0 - то open обязательно вернёт 0 - ибо возвращается наименьший файловый дескриптор. Таково соглашение - на этом построено, например, программирование конвейров (комбинацией close, pipe, dup) Можно очень просто проверить - сделав, скажем, fstat на 0 и отловив ошибку/посмотрев что к чему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 22:52:39 |
|
||
|
open возвращает 0
|
|||
|---|---|---|---|
|
#18+
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 вот почитайте вы шутите чтоли так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2008, 00:22:25 |
|
||
|
|

start [/forum/topic.php?fid=25&tid=1486261]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
216ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 483ms |

| 0 / 0 |
