Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   Не получается получить дескриптор файла (http://forum.oszone.net/showthread.php?t=89081)

just_sage 24-08-2007 00:34 632265

Не получается получить дескриптор файла
 
Совсем не знаю что делать: при использовании open() все время возвращается стандартный ввод (0), то есть

Код:

int fd;
fd = open(file, O_READONLY);

после этого fd = 0 какие бы файлы и пути ему ни подсовывал.

Я только начал с программированием под *nix возиться, может это какие-то стандартные грабли ? Поиск в Google и по форуму не помог.
:(

just_sage 24-08-2007 01:16 632275

Вот всё, что имеется:

Код test.c:

Код:

#include <stdio.h>
int main() {
        int fd;
        if ((fd = open("hello.c", 2) < 0)) {
                fprintf(stdout, "Cannot open for reading\n");
        }
        fprintf(stdout, "START: %u\n", fd);
        return 0;
}


Листинг директории:

Код:

-r-xr-xr-x  1 root root  115 Авг 21 14:29 cleanup.sh*
-rwxr-xr-x  1 root root 6786 Авг 22 21:58 hello*
-rw-r--r--  1 root root  176 Авг 22 21:58 hello.c
-rwxr-xr-x  1 root root 7992 Авг 23 22:36 inslog*
-rw-r--r--  1 root root  993 Авг 23 22:36 inslog.c
drwxr-xr-x  2 root root 1024 Авг 23 21:31 log/
-rwxr-xr-x  1 root root 7028 Авг 24 00:54 test*
-rw-r--r--  1 root root  181 Авг 24 00:53 test.c
-rw-r--r--  1 root root  370 Авг 23 20:18 test.php

Вбиваем fopen("hello1.c") выводит:
Cannot open for reading
START: 1

Вбиваем fopen("hello.c") выводит:
START: 0

Крыша едет :(

ruslandh 29-08-2007 00:16 634524

Цитата:

Цитата man open
КРАТКАЯ СВОДКА
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);

ОПИСАНИЕ
Системный вызов open превращает имя файла в дескриптор файла (небольшое
неотрицательное число, используемое при последующем вводе-выводе, например, с
read, write, и т. п. Если системный вызов завершается успешно, возвращенный
файловый дескриптор является самым маленьким дескриптором, который еще не
открыт процессом. В результате этого вызова появляется новый открытый файл, не
разделяемый ни с каким процессом (разделяемые открытые файлы могут возникнуть в
результате системного вызова fork(2). Новый файловый дескриптор будет
оставаться открытым при выполнении функции exec(2) (смотри описание fcntl(2)).
Указатель в файле устанавливается в начало.

PS А зачем программы под root писать ?


Время: 17:32.

Время: 17:32.
© OSzone.net 2001-