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