1<?xml version="1.0" encoding="UTF-8"?>
2<!--
3 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4 * Copyright (C) 2008 - INRIA
5 * Copyright (C) 2011 - DIGITEO - Allan CORNET
6 *
7 * Copyright (C) 2012 - 2016 - Scilab Enterprises
8 *
9 * This file is hereby licensed under the terms of the GNU GPL v2.0,
10 * pursuant to article 5.3.4 of the CeCILL v.2.1.
11 * This file was originally licensed under the terms of the CeCILL v2.1,
12 * and continues to be available under such terms.
13 * For more information, see the COPYING file which you should have received
14 * along with this program.
15 *
16 -->
17<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns4="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="mopen" xml:lang="ru">
18    <refnamediv>
19        <refname>mopen</refname>
20        <refpurpose>открывает файл в Scilab'е</refpurpose>
21    </refnamediv>
22    <refsynopsisdiv>
23        <title>Синтаксис</title>
24        <synopsis>[fd, err] = mopen(file [, mode, swap ])</synopsis>
25    </refsynopsisdiv>
26    <refsection>
27        <title>Аргументы</title>
28        <variablelist>
29            <varlistentry>
30                <term>file</term>
31                <listitem>
32                    <para>
33                        символьная строка, содержащая имя файла, который требуется открыть.
34                    </para>
35                </listitem>
36            </varlistentry>
37            <varlistentry>
38                <term>mode</term>
39                <listitem>
40                    <para>
41                        символьная строка, определяющая требуемый режим доступа к файлу.
42                    </para>
43                </listitem>
44            </varlistentry>
45            <varlistentry>
46                <term>swap</term>
47                <listitem>
48                    <para>
49                        скаляр. Если есть <varname>swap</varname> и <code>swap = 0</code>, тогда автоматическая перестановка байтов отключается.
50                    </para>
51                    <para>Значение по умолчанию равно 1.</para>
52                </listitem>
53            </varlistentry>
54            <varlistentry>
55                <term>err</term>
56                <listitem>
57                    <para>скаляр. Индикатор ошибки.</para>
58                    <informaltable border="1">
59                        <tr>
60                            <td>значение ошибки:</td>
61                            <td>сообщение об ошибке:</td>
62                        </tr>
63                        <tr>
64                            <td>0</td>
65                            <td>нет ошибки</td>
66                        </tr>
67                        <tr>
68                            <td>-1</td>
69                            <td>больше нет логических модулей</td>
70                        </tr>
71                        <tr>
72                            <td>-2</td>
73                            <td>не могу открыть файл</td>
74                        </tr>
75                        <tr>
76                            <td>-3</td>
77                            <td>больше нет памяти</td>
78                        </tr>
79                        <tr>
80                            <td>-4</td>
81                            <td>некорректное имя</td>
82                        </tr>
83                        <tr>
84                            <td>-5</td>
85                            <td>некорректный статус</td>
86                        </tr>
87                    </informaltable>
88                </listitem>
89            </varlistentry>
90            <varlistentry>
91                <term>fd</term>
92                <listitem>
93                    <para>
94                        скаляр: дескриптор файла (это положительное целое число).
95                    </para>
96                </listitem>
97            </varlistentry>
98        </variablelist>
99    </refsection>
100    <refsection>
101        <title>Описание</title>
102        <para>
103            Функция <function>mopen</function> может использоваться для
104            того, чтобы открыть файл <varname>file</varname> способом,
105            совместимым с C-процедурой <function>fopen</function>. Без
106            аргумента <varname>swap</varname> файл
107            <varname>file</varname> предполагается закодированным в
108            формате IEEE "с прямым порядком байтов" и байты данных
109            автоматически переставляются, если необходимо
110            соответствовать формату IEEE процессора.
111        </para>
112        <para>
113            Параметр <varname>mode</varname> управляет типом
114            доступа к потоку. Этот параметр может иметь одно из
115            следующих значений:
116        </para>
117        <variablelist>
118            <varlistentry>
119                <term>r</term>
120                <listitem>
121                    <para>
122                        открывает файл для чтения (по умолчанию). Файл
123                        должен существовать, в противном случае ничего
124                        не получится.
125                    </para>
126                </listitem>
127            </varlistentry>
128            <varlistentry>
129                <term>w</term>
130                <listitem>
131                    <para>
132                        открывает файл на запись. Если этот файл
133                        существует, то его содержимое будет уничтожено.
134                    </para>
135                </listitem>
136            </varlistentry>
137            <varlistentry>
138                <term>a</term>
139                <listitem>
140                    <para>
141                        открывает файл для добавления записи. Создаёт
142                        файл если он не существует.
143                    </para>
144                </listitem>
145            </varlistentry>
146            <varlistentry>
147                <term>r+</term>
148                <listitem>
149                    <para>
150                        открывает файл как для чтения, так и для записи.
151                        Файл должен существовать, иначе ничего не
152                        получится.
153                    </para>
154                </listitem>
155            </varlistentry>
156            <varlistentry>
157                <term>w+</term>
158                <listitem>
159                    <para>
160                        открывает файл как для чтения, так и для записи.
161                        Если файл существует, то его содержимое будет
162                        уничтожено.
163                    </para>
164                </listitem>
165            </varlistentry>
166            <varlistentry>
167                <term>a+</term>
168                <listitem>
169                    <para>
170                        открывает файл как на чтение, так и на
171                        добавление записи. Создаёт файл если он не
172                        существует.
173                    </para>
174                </listitem>
175            </varlistentry>
176        </variablelist>
177        <para>
178            Кроме того могут быть использованы следующие символы для определения типа файла:
179            <variablelist>
180                <varlistentry>
181                    <term>t</term>
182                    <listitem>
183                        <para>текстовый файл.</para>
184                    </listitem>
185                </varlistentry>
186                <varlistentry>
187                    <term>b</term>
188                    <listitem>
189                        <para>двоичный файл (по умолчанию).</para>
190                    </listitem>
191                </varlistentry>
192            </variablelist>
193        </para>
194        <para>
195            По умолчанию режим доступа <literal>'rb'</literal> (чтение
196            двоичного файла).
197        </para>
198        <para>
199            <note>
200                Заметьте: в Windows, в режиме текстового файла комбинации CR (возврат каретки) - LF (конец строки) преобразуются в LF при чтении, а LF преобразуются в комбинации CR-LF при записи.
201            </note>
202        </para>
203        <para>
204            Когда вы открываете файл для обновления, вы можете выполнять операции
205            как ввода, так и вывода в результирующем потоке. Однако за операцией
206            вывода не может напрямую идти операция ввода без операции
207            позиционирования файла (функция <function>mseek</function>). Также,
208            за операцией ввода не может идти операция вывода без промежуточной
209            операции позиционирования файла пока операция ввода не встретит конец
210            файла.
211        </para>
212        <para>
213            Когда вы открываете файл для добавления записи (то есть, когда
214            параметр <varname>mode</varname> равен <literal>a</literal> или
215            <literal>a+</literal>), то невозможно перезаписать информацию,
216            которая уже есть в файле. Вы можете использовать функцию
217            <function>mseek</function> для смены положения указателя позиции в
218            файле в любое место файла, но, когда вывод записан в файл, текущий
219            указатель позиции в файле игнорируется. Весь вывод записывается в
220            конец файла и указатель позиции в файле перемещается в конец вывода.
221        </para>
222        <para>
223            Чтобы открыть файлы способом, совместимым с Fortran-функциями используйте функцию <function>file</function>.
224        </para>
225    </refsection>
226    <refsection>
227    </refsection>
228    <refsection>
229        <title>Примеры</title>
230        <programlisting role="example"><![CDATA[
231// открываем SCI+'/ACKNOWLEDGEMENTS' как текст только для чтения
232fd_r = mopen(SCI+'/ACKNOWLEDGEMENTS', 'rt')
233
234// читаем пять строк в fd_r
235mgetl(fd_r, 5)
236
237// другой способ чтения файла
238// здесь читаются пять слов
239mfscanf(5, fd_r, '%s')
240
241// закрываем дескриптор файл, связанный с SCI+'/ACKNOWLEDGEMENTS'
242mclose(fd_r);
243    ]]></programlisting>
244    </refsection>
245    <refsection>
246    </refsection>
247    <refsection>
248        <programlisting role="example"><![CDATA[
249// открываем файл как текст с возможностью записи
250fd_w = mopen(TMPDIR+'/write.txt', 'wt');
251
252// записываем строчку в fd_w
253mputl('This is a line of text', fd_w);
254mclose(fd_w);
255
256// читаем текст
257fd_r2 = mopen(TMPDIR+'/write.txt', 'rt');
258mgetl(fd_r2)
259mclose(fd_r2);
260    ]]></programlisting>
261    </refsection>
262    <refsection>
263    </refsection>
264    <refsection>
265        <programlisting role="example"><![CDATA[
266// читаем/записываем файл как двоичный
267
268// сперва мы запишем файл
269fd_wb = mopen(TMPDIR+'/writeread.bin', 'wb')
270
271// положим значения в двоичном виде
272mput(2003, 'l', fd_wb);
273mput(2008, 'i', fd_wb);
274mput(2012, 's', fd_wb);
275mput(98, 'c', fd_wb);
276
277// закроем дескриптор файла, связанный с TMPDIR+'/writeread.bin'
278mclose(fd_wb);
279
280// прочитаем файл
281fd_rb = mopen(TMPDIR+'/writeread.bin', 'rb')
282
283mget(fd_rb, 'l')
284mget(fd_rb, 'i')
285mget(fd_rb, 's')
286mget(fd_rb, 'c')
287
288mclose(fd_rb)
289    ]]></programlisting>
290    </refsection>
291    <refsection>
292    </refsection>
293    <refsection role="see also">
294        <title>Смотрите также</title>
295        <simplelist type="inline">
296            <member>
297                <link linkend="file">file</link>
298            </member>
299            <member>
300                <link linkend="mclose">mclose</link>
301            </member>
302            <member>
303                <link linkend="merror">merror</link>
304            </member>
305            <member>
306                <link linkend="meof">meof</link>
307            </member>
308            <member>
309                <link linkend="mfprintf">mfprintf</link>
310            </member>
311            <member>
312                <link linkend="fprintfMat">fprintfMat</link>
313            </member>
314            <member>
315                <link linkend="mfscanf">mfscanf</link>
316            </member>
317            <member>
318                <link linkend="fscanfMat">fscanfMat</link>
319            </member>
320            <member>
321                <link linkend="mget">mget</link>
322            </member>
323            <member>
324                <link linkend="mgetl">mgetl</link>
325            </member>
326            <member>
327                <link linkend="mgetstr">mgetstr</link>
328            </member>
329            <member>
330                <link linkend="mprintf">mprintf</link>
331            </member>
332            <member>
333                <link linkend="mput">mput</link>
334            </member>
335            <member>
336                <link linkend="mputl">mputl</link>
337            </member>
338            <member>
339                <link linkend="mputstr">mputstr</link>
340            </member>
341            <member>
342                <link linkend="mseek">mseek</link>
343            </member>
344            <member>
345                <link linkend="mtell">mtell</link>
346            </member>
347            <member>
348                <link linkend="mdelete">mdelete</link>
349            </member>
350        </simplelist>
351    </refsection>
352</refentry>
353
354