<term>file</term>
<listitem>
<para>
- символьная строка. Имя файла, который требуется открыть.
+ символьная строка, содержащая имя файла, который требуется открыть.
</para>
</listitem>
</varlistentry>
<term>mode</term>
<listitem>
<para>
- символьная строка, которая контролирует открыт ли файл для
- чтения (<literal>r</literal>), записи (<literal>w</literal>)
- или дополнения (<literal>a</literal>) и открыт ли файл для
- обновления (<literal>+</literal>). <varname>mode</varname>
- может также включать в себя параметр <literal>b</literal> для
- указания бинарного файла.
- </para>
- <para>
- Значение по умолчанию - <literal>'rb'</literal>.
+ символьная строка, определяющая требуемый режим доступа к файлу.
</para>
</listitem>
</varlistentry>
<refsection>
<title>Описание</title>
<para>
- Функция <function>mopen</function> может использоваться для того, чтобы открыть файл <varname>file</varname> способом, совместимым с C-процедурой <function>fopen</function>. Без аргумента <varname>swap</varname> файл <varname>file</varname> предполагается закодированным в формате IEEE "с прямым порядком байтов" и байты данных автоматически переставляются, если необходимо соответствовать формату IEEE процессора.
+ Функция <function>mopen</function> может использоваться для
+ того, чтобы открыть файл <varname>file</varname> способом,
+ совместимым с C-процедурой <function>fopen</function>. Без
+ аргумента <varname>swap</varname> файл
+ <varname>file</varname> предполагается закодированным в
+ формате IEEE "с прямым порядком байтов" и байты данных
+ автоматически переставляются, если необходимо
+ соответствовать формату IEEE процессора.
</para>
<para>
- Параметр <varname>mode</varname> управляет разрешённым доступом к потоку. Этот параметр может иметь одно из следующих значений. В этом списке значений символ <literal>b</literal> обозначает бинарный файл.
+ Параметр <varname>mode</varname> управляет типом доступа к потоку. Этот параметр может иметь одно из
+ следующих значений:
</para>
<variablelist>
<varlistentry>
<term>r</term>
<listitem>
- <para>открывает файл для чтения.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>rb</term>
- <listitem>
- <para>открывает бинарный файл для чтения.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>rt</term>
- <listitem>
- <para>открывает текстовый файл для чтения.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>w</term>
- <listitem>
- <para>
- создаёт новый файл для записи или открывает и усекает файл до нулевой длины.
- </para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>wb</term>
- <listitem>
<para>
- создаёт новый бинарный файл для записи или открывает и усекает файл до нулевой длины.
+ открывает файл для чтения (по умолчанию). Файл
+ должен существовать, в противном случае ничего
+ не получится.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>wt</term>
+ <term>w</term>
<listitem>
<para>
- создаёт текстовый бинарный файл для записи или открывает и усекает файл до нулевой длины.
+ открывает файл на запись. Если этот файл
+ существует, то его содержимое будет уничтожено.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>a или ab</term>
+ <term>a</term>
<listitem>
<para>
- добавляет запись (открывает файл для записи в конце файла или создаёт файл для записи).
+ открывает файл для добавления записи. Создаёт
+ файл если он не существует.
</para>
- </listitem>
+ </listitem>
</varlistentry>
<varlistentry>
- <term>r+ или r+b</term>
+ <term>r+</term>
<listitem>
<para>
- открывает файл для обновления (чтение и запись).
+ открывает файл как для чтения, так и для записи.
+ Файл должен существовать, иначе ничего не
+ получится.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>w+ or w+b</term>
+ <term>w+</term>
<listitem>
<para>
- усекает до нулевой длины или создаёт файл для обновления.
+ открывает файл как для чтения, так и для записи.
+ Если файл существует, то его содержимое будет
+ уничтожено.
</para>
- </listitem>
+ </listitem>
</varlistentry>
<varlistentry>
- <term>a+ или a+b</term>
+ <term>a+</term>
<listitem>
<para>
- добавляет запись (открывает файл для обновления, записывая в конце файла, или создаёт файл для записи).
+ открывает файл как на чтение, так и на
+ добавление записи. Создаёт файл если он не
+ существует.
</para>
</listitem>
</varlistentry>
</variablelist>
<para>
- Когда вы открываете файл для обновления, вы можете выполнять операции
- как ввода, так и вывода в результирующем потоке. Однако за операцией
- вывода не может напрямую идти операция ввода без операции
- позиционирования файла (функция <function>mseek</function>). Также,
- за операцией ввода не может идти операция вывода без промежуточной
- операции позиционирования файла пока операция ввода не встретит конец
+ Кроме того могут быть использованы следующие символы для определения типа файла:
+ <variablelist>
+ <varlistentry>
+ <term>t</term>
+ <listitem>
+ <para>текстовый файл.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>b</term>
+ <listitem>
+ <para>двоичный файл (по умолчанию).</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ <para>
+ По умолчанию режим доступа <literal>'rb'</literal> (чтение
+ двоичного файла).
+ </para>
+ <para>
+ <note>
+ Заметьте: в Windows, в режиме текстового файла комбинации CR (возврат каретки) - LF (конец строки) преобразуются в LF при чтении, а LF преобразуются в комбинации CR-LF при записи.
+ </note>
+ </para>
+ <para>
+ Когда вы открываете файл для обновления, вы можете выполнять операции
+ как ввода, так и вывода в результирующем потоке. Однако за операцией
+ вывода не может напрямую идти операция ввода без операции
+ позиционирования файла (функция <function>mseek</function>). Также,
+ за операцией ввода не может идти операция вывода без промежуточной
+ операции позиционирования файла пока операция ввода не встретит конец
файла.
</para>
<para>
- Когда вы открываете файл для добавления записи (то есть, когда
- параметр <varname>mode</varname> равен <literal>a</literal> или
- <literal>a+</literal>), то невозможно перезаписать информацию,
- которая уже есть в файле. Вы можете использовать функцию
- <function>mseek</function> для смены положения указателя позиции в
- файле в любое место файла, но, когда вывод записан в файл, текущий
- указатель позиции в файле игнорируется. Весь вывод записывается в
- конец файла и указатель позиции в файле перемещается в конец вывода.
+ Когда вы открываете файл для добавления записи (то есть, когда
+ параметр <varname>mode</varname> равен <literal>a</literal> или
+ <literal>a+</literal>), то невозможно перезаписать информацию,
+ которая уже есть в файле. Вы можете использовать функцию
+ <function>mseek</function> для смены положения указателя позиции в
+ файле в любое место файла, но, когда вывод записан в файл, текущий
+ указатель позиции в файле игнорируется. Весь вывод записывается в
+ конец файла и указатель позиции в файле перемещается в конец вывода.
</para>
<para>
Чтобы открыть файлы способом, совместимым с Fortran-функциями используйте функцию <function>file</function>.
<programlisting role="example"><![CDATA[
// открываем SCI+'/ACKNOWLEDGEMENTS' как текст только для чтения
fd_r = mopen(SCI+'/ACKNOWLEDGEMENTS', 'rt')
-
+
// читаем пять строк в fd_r
mgetl(fd_r, 5)
-
+
// другой способ чтения файла
// здесь читаются пять слов
mfscanf(5, fd_r, '%s')
-
+
// закрываем дескриптор файл, связанный с SCI+'/ACKNOWLEDGEMENTS'
mclose(fd_r);
]]></programlisting>
<programlisting role="example"><![CDATA[
// открываем файл как текст с возможностью записи
fd_w = mopen(TMPDIR+'/write.txt', 'wt');
-
+
// записываем строчку в fd_w
mputl('This is a line of text', fd_w);
mclose(fd_w);
-
+
// читаем текст
fd_r2 = mopen(TMPDIR+'/write.txt', 'rt');
mgetl(fd_r2)
<refsection>
<programlisting role="example"><![CDATA[
// читаем/записываем файл как двоичный
-
+
// сперва мы запишем файл
fd_wb = mopen(TMPDIR+'/writeread.bin', 'wb')
-
+
// положим значения в двоичном виде
mput(2003, 'l', fd_wb);
mput(2008, 'i', fd_wb);
mput(2012, 's', fd_wb);
mput(98, 'c', fd_wb);
-
+
// закроем дескриптор файла, связанный с TMPDIR+'/writeread.bin'
mclose(fd_wb);
-
+
// прочитаем файл
fd_rb = mopen(TMPDIR+'/writeread.bin', 'rb')
-
+
mget(fd_rb, 'l')
mget(fd_rb, 'i')
mget(fd_rb, 's')
mget(fd_rb, 'c')
-
-mclose(fd_rb)
+
+mclose(fd_rb)
]]></programlisting>
</refsection>
<refsection>