2015-06-28 1 views
2

Я хочу открыть файл, поэтому я использую функцию fopen_s под ubuntu. Хотя I #include <stdio.h>, как прочитано здесь http://en.cppreference.com/w/c/io/fopen, я получаю функцию ошибки, которая не была объявлена ​​в области. Пожалуйста, помогите мне, что я делаю неправильно, и как это сделать?fopen_s не разрешен под ubuntu

FILE *fp; 
fopen_s(&fp, strFilename.c_str(), "rb"); 
if (fp == NULL){ 
    cout << "cannot open " << strFilename.c_str(); 
    return false; 
} 

fclose(fp); 
+0

Вы компиляции с -std = c11? –

+2

Обратите также внимание на то, что эта функция НЕ является частью стандарта C++ 11, только C11, насколько я могу судить. –

ответ

1

Поиск Glibc на Linux не находит никаких доказательств того, что fopen_s() реализован в Glibc на Linux.

Я не упоминаю fopen_s() в POSIX specification. Мне кажется, что fopen_s() - это не переносная функция библиотеки, которая реализована только в Microsoft Windows.

+0

спасибо за это исследование, я только что последовал за учебником, но действительно это на окнах. Есть ли возможность сделать то же самое с другой функцией? – beginh

+1

Это часть спецификации C11, страница 490: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (с описанием на стр. 588) Очевидно, что степень реализация для C11 в Linux, я не могу комментировать. –

+0

Используйте fopen() вместо fopen_s(). Я не вижу ничего, что fopen_s() не может быть выполнено с помощью функции fopen(). –