2016-05-12 8 views
-3

может кто-то объяснить мне, почему открытие файла не увенчалось успехом? почему печать «файла» даст -1? Это проблема с char *source?Открытие файла дает неожиданное возвращаемое значение

int opf(char *source){ 
    int file; 
    file=open(source,O_RWR); 
    printf("%d",file); 
} 

А можно сделать что-то вроде этого: файл находится в другой директории, так

int opf(char *source){ 
    int file; 
    file=open("some_directory/ %s",source,O_RWR); 
    printf("%d",file); 
} 

здесь я получаю «делает целое число от указателя без литым» ошибки. Я пробовал много разных вещей, но я думаю, что проблема кроется в том, что я не правильно понимаю понятия.

+2

Что такое 'O_RWR? Вы имеете в виду 'O_RDWR? –

+1

Что касается вашего второго и несвязанного вопроса (вы должны действительно написать два вопроса), найдите и прочитайте о 'snprintf'. –

+3

Это не имеет никакого отношения к указателям; вы пытаетесь использовать 'open', как будто это' printf'. Но это не 'printf'. Это 'открытый'. –

ответ

8

Из man page из open() (курсив)

При успешном завершении функция должна открыть файл и возвращает неотрицательное целое число, представляющее с наименьшим номером неиспользуемого дескриптора файла. В противном случае -1 должно быть возвращено и errno установлено для указания ошибки. Никакие файлы не должны создаваться или модифицироваться, если функция возвращает -1.

Так, в вашем случае open() потерпел неудачу. Обратитесь к errno, чтобы получить более подробную информацию об этом. Все возможные значения для errno также задокументированы на связанной странице.

Это, как говорится,

  1. O_RWR не кажется, действительный режим, O_RDWR есть.
  2. Для второго подхода вы можете сначала использовать sprintf()/snprintf(), чтобы создать строку path, а затем вы можете передать ее open().
Смежные вопросы