Fopen function in cpp

fopen, fopen_s

1) Opens a file indicated by filename and returns a pointer to the file stream associated with that file. mode is used to determine the file access mode.

  • streamptr is a null pointer
  • filename is a null pointer
  • mode is a null pointer

Contents

[edit] Parameters

filename file name to associate the file stream to
mode null-terminated character string determining file access mode
streamptr pointer to a pointer where the function stores the result (an out-parameter)

[edit] File access flags

File access
mode string
Meaning Explanation Action if file
already exists
Action if file
does not exist
«r» read Open a file for reading read from start failure to open
«w» write Create a file for writing destroy contents create new
«a» append Append to a file write to end create new
«r+» read extended Open a file for read/write read from start error
«w+» write extended Create a file for read/write destroy contents create new
«a+» append extended Open a file for read/write write to end create new
File access mode flag «b» can optionally be specified to open a file in binary mode. This flag has no effect on POSIX systems, but on Windows it disables special handling of ‘ \n ‘ and ‘ \x1A ‘ .
On the append file access modes, data is written to the end of the file regardless of the current position of the file position indicator.
The behavior is undefined if the mode is not one of the strings listed above. Some implementations define additional supported modes (e.g. Windows).
In update mode ( ‘+’ ), both input and output may be performed, but output cannot be followed by input without an intervening call to fflush , fseek , fsetpos or rewind , and input cannot be followed by output without an intervening call to fseek , fsetpos or rewind , unless the input operation encountered end of file. In update mode, implementations are permitted to use binary mode even when text mode is specified.
File access mode flag «x» can optionally be appended to «w» or «w+» specifiers. This flag forces the function to fail if the file exists, instead of overwriting it. (C11)
When using fopen_s or freopen_s , file access permissions for any file created with «w» or «a» prevents other users from accessing it. File access mode flag «u» can optionally be prepended to any specifier that begins with «w» or «a» , to enable the default fopen permissions. (C11)
Читайте также:  Подключение встроенных стилей

[edit] Return value

1) If successful, returns a pointer to the new file stream. The stream is fully buffered unless filename refers to an interactive device. On error, returns a null pointer. POSIX requires that errno be set in this case.

2) If successful, returns zero and a pointer to the new file stream is written to * streamptr . On error, returns a non-zero error code and writes the null pointer to * streamptr (unless streamptr is a null pointer itself).

[edit] Notes

The format of filename is implementation-defined, and does not necessarily refer to a file (e.g. it may be the console or another device accessible though filesystem API). On platforms that support them, filename may include absolute or relative filesystem path.

[edit] Example

#include #include int main(void) { const char* fname = "/tmp/unique_name.txt"; // or tmpnam(NULL); int is_ok = EXIT_FAILURE; FILE* fp = fopen(fname, "w+"); if (!fp) { perror("File opening failed"); return is_ok; } fputs("Hello, world!\n", fp); rewind(fp); int c; // note: int, not char, required to handle EOF while ((c = fgetc(fp)) != EOF) // standard C I/O file reading loop putchar(c); if (ferror(fp)) puts("I/O error when reading"); else if (feof(fp)) { puts("End of file is reached successfully"); is_ok = EXIT_SUCCESS; } fclose(fp); remove(fname); return is_ok; }
Hello, world! End of file is reached successfully

[edit] References

  • C17 standard (ISO/IEC 9899:2018):
  • 7.21.5.3 The fopen function (p: 223-224)
  • K.3.5.2.1 The fopen_s function (p: 428-429)
  • C11 standard (ISO/IEC 9899:2011):
  • 7.21.5.3 The fopen function (p: 305-306)
  • K.3.5.2.1 The fopen_s function (p: 588-590)

Источник

Функция fopen

Функция fopen открывает файл, имя которого указано в параметре fname и связывает его с потоком, который может быть идентифицирован для выполнения различных операций с файлом. Операции с потоком, выполнение которых разрешено определяются параметром modeopen . Cреда программирования поддерживает, по крайней мере, FOPEN_MAX — количество открытых файлов одновременно, где FOPEN_MAX является макро-константа, определенная в .

Параметры:

  • fname
    Си-строка, содержащая имя файла, который необходимо открыть. Этот параметр должен соответствовать правилам именования файлов в используемой системе, и может включать в себя путь, если система поддерживает его.
  • modeopen
    Строка, содержащая режим доступа к файлу. Далее приведён список режимов и их описание:

Выше указанные спецификаторы режима доступа к файлу используются только в текстовых файлах. Для того, чтобы открыть двоичный файл, символ b должен быть включен в режим доступа. Этот дополнительный символ b может быть добавлен в конец строки, что даёт следующие режимы доступа к бинарным файлам: rb , wb , ab , r+b , w+b , a+b или может быть вставлен между буквой и знаком + , в случае со смешанными режимами: rb+ , wb+ , ab+ .

В последовательности спецификаторов доступа могут находиться дополнительные символы, хотя они никак не влияют на работу программы. Например, символ ‘ t ‘ иногда прилагается, чтобы показать, что файл является текстовым.

В случае текстовых файлов, в зависимости от среды, в которой работает приложение, некоторые специальные символы преобразования могут в операциях ввода/вывода могут быть адаптированы к системе, из-за специфического формата текстового файла. Во многих системах, например, UNIX-системах, это не имеет значения ни для открытия файла в текстовом режиме ни для открытия файла в двоичном режиме. Оба попадают точно так же, но адаптация служебных символов рекомендуется для лучшей переносимости.

Для смешанных режимов (те, которые включают в себя знак « + »), когда разрешены операции чтения и записи (или добавления), следует обнулить поток функцией fflush или изменить позицию внутреннего указателя ( fseek fsetpos , rewind ) после операции чтения, за которой следует операция записи и, наоборот, после операции записи, за которой следует операция чтения.

Возвращаемое значение

Если файл был успешно открыт, функция возвращает указатель на объект файла, который используется для идентификации потока и выполнения операций с файлом. В противном случае, возвращается нулевой указатель.

Пример: исходный код программы

//пример использования функции fopen #include #include int main () < FILE * ptrFile = fopen("file.txt", "w"); if (ptrFile != NULL) < fputs("Пример использования функции fopen ", ptrFile); // записать строку в файл fclose (ptrFile); >return 0; >

Пример работы программы

Записать в только что открытый файл file.txt строку «Пример использования функции fopen» .

Источник

Оцените статью