http://wiki.linuxformat.ru/wiki/index.php?title=LXF80:Unix_API&feed=atom&action=historyLXF80:Unix API - История изменений2024-03-28T19:20:34ZИстория изменений этой страницы в викиMediaWiki 1.19.20+dfsg-0+deb7u3http://wiki.linuxformat.ru/wiki/index.php?title=LXF80:Unix_API&diff=4462&oldid=prevLockal: восстановление кавычек в коде AWB2008-04-27T13:34:01Z<p>восстановление кавычек в коде <a href="/wiki/index.php?title=Linuxformat:AutoWikiBrowser&action=edit&redlink=1" class="new" title="Linuxformat:AutoWikiBrowser (страница не существует)">AWB</a></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black;">Версия 13:34, 27 апреля 2008</td>
</tr><tr><td colspan="2" class="diff-lineno">Строка 16:</td>
<td colspan="2" class="diff-lineno">Строка 16:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Работа с CD-ROM с помощью устройства '''/dev/cdrom''' обычно выполняется по следующему сценарию: открытие файла устройства, настройка параметров с помощью '''ioctl(2)''', чтение (запись) данных, закрытие устройства. Полный текст программы вы найдете на прилагаемом к журналу диске; здесь мы рассмотрим только самые интересные части, имеющие отношение к управлению устройствами-файлами. Текст программы начинается с директив включения заголовочных файлов. Файлы '''unistd.h''' и '''sys/fcntl.h''' содержат функции для работы с системными вызовами. Заголовочный файл '''linux/cdrom.h''' содержит различные константы и макросы, используемые при работе с CD-ROM, но, увы, не содержит макросов, с помощью которых можно было бы преобразовать MSF во фреймы и обратно. Мы сами определяем соответствующие функции. Мы открываем файл устройства с помощью системного вызова open(2):</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Работа с CD-ROM с помощью устройства '''/dev/cdrom''' обычно выполняется по следующему сценарию: открытие файла устройства, настройка параметров с помощью '''ioctl(2)''', чтение (запись) данных, закрытие устройства. Полный текст программы вы найдете на прилагаемом к журналу диске; здесь мы рассмотрим только самые интересные части, имеющие отношение к управлению устройствами-файлами. Текст программы начинается с директив включения заголовочных файлов. Файлы '''unistd.h''' и '''sys/fcntl.h''' содержат функции для работы с системными вызовами. Заголовочный файл '''linux/cdrom.h''' содержит различные константы и макросы, используемые при работе с CD-ROM, но, увы, не содержит макросов, с помощью которых можно было бы преобразовать MSF во фреймы и обратно. Мы сами определяем соответствующие функции. Мы открываем файл устройства с помощью системного вызова open(2):</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>  int cdd = open(<del class="diffchange diffchange-inline">“</del>/dev/<del class="diffchange diffchange-inline">cdrom”</del>, O_RDONLY);</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>  int cdd = open(<ins class="diffchange diffchange-inline">"</ins>/dev/<ins class="diffchange diffchange-inline">cdrom"</ins>, O_RDONLY);</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Флаг, переданный функции '''open''', указывает, что файл открыт только для чтения. Дальнейший доступ к устройству будет выполняться с помощью полученного дескриптора '''cdd'''. В ''Linux 2.4.22 ''<nowiki>каждый процесс может открыть не более 1048576 дескрипторов одновременно [2]. Нашим программам этого будет вполне достаточно. Мы предполагаем, что устройство </nowiki>'''/dev/cdrom''' установлено в системе и работает правильно, однако, в общем случае неплохо проверить значение дескриптора, возвращенное '''open''', на предмет ошибки (в этом случае функция возвращает '''-1''', переменная '''errno''' содержит дополнительный код ошибки). Вызовы '''ioctl''', связанные с воспроизведением Audio CD, приведены в таблице 1.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Флаг, переданный функции '''open''', указывает, что файл открыт только для чтения. Дальнейший доступ к устройству будет выполняться с помощью полученного дескриптора '''cdd'''. В ''Linux 2.4.22 ''<nowiki>каждый процесс может открыть не более 1048576 дескрипторов одновременно [2]. Нашим программам этого будет вполне достаточно. Мы предполагаем, что устройство </nowiki>'''/dev/cdrom''' установлено в системе и работает правильно, однако, в общем случае неплохо проверить значение дескриптора, возвращенное '''open''', на предмет ошибки (в этом случае функция возвращает '''-1''', переменная '''errno''' содержит дополнительный код ошибки). Вызовы '''ioctl''', связанные с воспроизведением Audio CD, приведены в таблице 1.</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 27:</td>
<td colspan="2" class="diff-lineno">Строка 27:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  {</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  close(cdd);</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  close(cdd);</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>  printf(<del class="diffchange diffchange-inline">“Устройство </del>не готово\<del class="diffchange diffchange-inline">n”</del>);</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>  printf(<ins class="diffchange diffchange-inline">"Устройство </ins>не готово\<ins class="diffchange diffchange-inline">n"</ins>);</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  return 1;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  return 1;</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 57:</td>
<td colspan="2" class="diff-lineno">Строка 57:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Принцип, согласно которому любой объект системы должен быть представлен в виде файла, приводит к тому, что даже дескрипторы файлов представлены в Linux в виде файлов. В директории '''/dev/fd''' можно увидеть файлы-ссылки с именами '''0, 1, 2''' и так далее. Эти файлы представляют дескрипторы файлов, открытых процессом, который читает директорию '''/dev/fd'''. Именно так, каждый процесс видит в этой директории только свои дескрипторы. Как некий артефакт из фантастического мира, директория '''/dev/fd''' выглядит по-разному в зависимости от того, кто на нее «смотрит» (этим свойством обладают также многие директории и файлы из виртуальной файловой системы '''/proc''', которую мы рассмотрим ниже). Открытие файла ссылки из '''/dev/fd''' эквивалентно созданию дубликата дескриптора, который представляет файл. Например, вызов</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Принцип, согласно которому любой объект системы должен быть представлен в виде файла, приводит к тому, что даже дескрипторы файлов представлены в Linux в виде файлов. В директории '''/dev/fd''' можно увидеть файлы-ссылки с именами '''0, 1, 2''' и так далее. Эти файлы представляют дескрипторы файлов, открытых процессом, который читает директорию '''/dev/fd'''. Именно так, каждый процесс видит в этой директории только свои дескрипторы. Как некий артефакт из фантастического мира, директория '''/dev/fd''' выглядит по-разному в зависимости от того, кто на нее «смотрит» (этим свойством обладают также многие директории и файлы из виртуальной файловой системы '''/proc''', которую мы рассмотрим ниже). Открытие файла ссылки из '''/dev/fd''' эквивалентно созданию дубликата дескриптора, который представляет файл. Например, вызов</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>  fd = open(<del class="diffchange diffchange-inline">“</del>/dev/fd/<del class="diffchange diffchange-inline">1”</del>, 0);</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>  fd = open(<ins class="diffchange diffchange-inline">"</ins>/dev/fd/<ins class="diffchange diffchange-inline">1"</ins>, 0);</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>присваивает '''fd''' дубликат дескриптора, представленного файлом '''/dev/fd/1''' (файлы '''/dev/fd/0''', '''/dev/fd/1''' и '''/dev/fd/2''' по умолчанию соответствуют стандартным потокам ввода, вывода и ошибок).'''зов Описание Дополнительный параметр'''</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>присваивает '''fd''' дубликат дескриптора, представленного файлом '''/dev/fd/1''' (файлы '''/dev/fd/0''', '''/dev/fd/1''' и '''/dev/fd/2''' по умолчанию соответствуют стандартным потокам ввода, вывода и ошибок).'''зов Описание Дополнительный параметр'''</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 180:</td>
<td colspan="2" class="diff-lineno">Строка 180:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  int len, i;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  int len, i;</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  FILE * f;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  FILE * f;</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>  f = fopen(<del class="diffchange diffchange-inline">“</del>/proc/self/<del class="diffchange diffchange-inline">environ”</del>, <del class="diffchange diffchange-inline">“r”</del>);</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>  f = fopen(<ins class="diffchange diffchange-inline">"</ins>/proc/self/<ins class="diffchange diffchange-inline">environ"</ins>, <ins class="diffchange diffchange-inline">"r"</ins>);</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  while((len = fread(buf, 1, BUF_SIZE-1, f)) > 0)</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  while((len = fread(buf, 1, BUF_SIZE-1, f)) > 0)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   </div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   </div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 187:</td>
<td colspan="2" class="diff-lineno">Строка 187:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     <nowiki>for (i = 0; i < len; i++) if (buf[i]==0) buf[i] = 10;</nowiki></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     <nowiki>for (i = 0; i < len; i++) if (buf[i]==0) buf[i] = 10;</nowiki></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     <nowiki>buf[len] = 0;</nowiki></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>     <nowiki>buf[len] = 0;</nowiki></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>     printf(<del class="diffchange diffchange-inline">“</del>%<del class="diffchange diffchange-inline">s”</del>, buf);</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>     printf(<ins class="diffchange diffchange-inline">"</ins>%<ins class="diffchange diffchange-inline">s"</ins>, buf);</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   </div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   </div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   }</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 214:</td>
<td colspan="2" class="diff-lineno">Строка 214:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  if (argc != 2)</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  if (argc != 2)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  {</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>  <nowiki>printf(<del class="diffchange diffchange-inline">“Использование</del>: %s <директория>\<del class="diffchange diffchange-inline">n”</del>, argv[0]);</nowiki></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>  <nowiki>printf(<ins class="diffchange diffchange-inline">"Использование</ins>: %s <директория>\<ins class="diffchange diffchange-inline">n"</ins>, argv[0]);</nowiki></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  return 0;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  return 0;</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 220:</td>
<td colspan="2" class="diff-lineno">Строка 220:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  <nowiki>if (n < 0)</nowiki></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  <nowiki>if (n < 0)</nowiki></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  {</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>  printf(<del class="diffchange diffchange-inline">“Ошибка </del>чтения директории\<del class="diffchange diffchange-inline">n”</del>);</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>  printf(<ins class="diffchange diffchange-inline">"Ошибка </ins>чтения директории\<ins class="diffchange diffchange-inline">n"</ins>);</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  return 1;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  return 1;</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  <nowiki>for (i = 0; i < n; i++)</nowiki></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  <nowiki>for (i = 0; i < n; i++)</nowiki></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>  <nowiki>printf(<del class="diffchange diffchange-inline">“</del>%s inode=%i\<del class="diffchange diffchange-inline">n”</del>, entry[i]->d_name, entry[i]->d_ino);</nowiki></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>  <nowiki>printf(<ins class="diffchange diffchange-inline">"</ins>%s inode=%i\<ins class="diffchange diffchange-inline">n"</ins>, entry[i]->d_name, entry[i]->d_ino);</nowiki></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  return 0;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  return 0;</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   </div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   </div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 243:</td>
<td colspan="2" class="diff-lineno">Строка 243:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  if (argc != 2)</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  if (argc != 2)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  {</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>  <nowiki>printf(<del class="diffchange diffchange-inline">“Использование</del>: %s <директория>\<del class="diffchange diffchange-inline">n”</del>, argv[0]);</nowiki></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>  <nowiki>printf(<ins class="diffchange diffchange-inline">"Использование</ins>: %s <директория>\<ins class="diffchange diffchange-inline">n"</ins>, argv[0]);</nowiki></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  return 0;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  return 0;</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 249:</td>
<td colspan="2" class="diff-lineno">Строка 249:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  if (d == NULL)</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  if (d == NULL)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  {</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>  printf(<del class="diffchange diffchange-inline">“Ошибка </del>чтения директории\<del class="diffchange diffchange-inline">n”</del>);</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>  printf(<ins class="diffchange diffchange-inline">"Ошибка </ins>чтения директории\<ins class="diffchange diffchange-inline">n"</ins>);</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  return 1;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  return 1;</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  while (entry = readdir(d))</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  while (entry = readdir(d))</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>  printf(<del class="diffchange diffchange-inline">“</del>%s inode=%i\<del class="diffchange diffchange-inline">n”</del>, entry->d_name, entry->d_ino);</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>  printf(<ins class="diffchange diffchange-inline">"</ins>%s inode=%i\<ins class="diffchange diffchange-inline">n"</ins>, entry->d_name, entry->d_ino);</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  closedir(d);</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  closedir(d);</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  return 0;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  return 0;</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 269:</td>
<td colspan="2" class="diff-lineno">Строка 269:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  {</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  FILE * f;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  FILE * f;</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>  <nowiki>f = fopen(argv[1], <del class="diffchange diffchange-inline">“w”</del>);</nowiki></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>  <nowiki>f = fopen(argv[1], <ins class="diffchange diffchange-inline">"w"</ins>);</nowiki></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  if (f == NULL)</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  if (f == NULL)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  {</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>  <nowiki>printf(<del class="diffchange diffchange-inline">“Невозможно </del>создать файл: %<del class="diffchange diffchange-inline">s”</del>, argv[1]);</nowiki></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>  <nowiki>printf(<ins class="diffchange diffchange-inline">"Невозможно </ins>создать файл: %<ins class="diffchange diffchange-inline">s"</ins>, argv[1]);</nowiki></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  return 1;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  return 1;</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 336:</td>
<td colspan="2" class="diff-lineno">Строка 336:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  ...</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  ...</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   </div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>   </div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>  printf(<del class="diffchange diffchange-inline">“байты </del>%i – %i заблокированы процессом %i\<del class="diffchange diffchange-inline">n”</del>, off, off+64,</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>  printf(<ins class="diffchange diffchange-inline">"байты </ins>%i – %i заблокированы процессом %i\<ins class="diffchange diffchange-inline">n"</ins>, off, off+64,</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  fi.l_pid);</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  fi.l_pid);</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  }</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 344:</td>
<td colspan="2" class="diff-lineno">Строка 344:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  fi.l_type = F_UNLCK;</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  fi.l_type = F_UNLCK;</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  if (fcntl(fd, F_SETLK, &fi) == -1)</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>  if (fcntl(fd, F_SETLK, &fi) == -1)</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>  printf(<del class="diffchange diffchange-inline">“Ошибка </del>разблокирования\<del class="diffchange diffchange-inline">n”</del>);</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>  printf(<ins class="diffchange diffchange-inline">"Ошибка </ins>разблокирования\<ins class="diffchange diffchange-inline">n"</ins>);</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Скомпилируйте программу ''testlocks ''и запустите на выполнение сразу несколько экземпляров. Первый экземпляр t''estlocks ''создаст файл '''testlocks.txt'''. Каждый процесс заблокирует 64 байта в этом файле и сделает запись в заблокированную область. Второй, третий и все последующие экземпляры процессов сообщат, какие области файла уже заблокированы другими процессами. Завершить программу t''estlocks ''можно, нажав любую символьную клавишу, а затем ввод.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Скомпилируйте программу ''testlocks ''и запустите на выполнение сразу несколько экземпляров. Первый экземпляр t''estlocks ''создаст файл '''testlocks.txt'''. Каждый процесс заблокирует 64 байта в этом файле и сделает запись в заблокированную область. Второй, третий и все последующие экземпляры процессов сообщат, какие области файла уже заблокированы другими процессами. Завершить программу t''estlocks ''можно, нажав любую символьную клавишу, а затем ввод.</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 359:</td>
<td colspan="2" class="diff-lineno">Строка 359:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>'''ЛИТЕРАТУРА:'''</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>'''ЛИТЕРАТУРА:'''</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>• D. P. Bovet, M. Cesati, Understanding the Linux Kernel, 3rd Edition, <del class="diffchange diffchange-inline">O’Reilly</del>, 2005</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>• D. P. Bovet, M. Cesati, Understanding the Linux Kernel, 3rd Edition, <ins class="diffchange diffchange-inline">O`Reilly</ins>, 2005</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>• W. R. Stevens, S. A. Rago, Advanced Programming in the UNIX® Environment: Second Edition, Addison Wesley Professional, 2005</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>• W. R. Stevens, S. A. Rago, Advanced Programming in the UNIX® Environment: Second Edition, Addison Wesley Professional, 2005</div></td></tr>
</table>Lockalhttp://wiki.linuxformat.ru/wiki/index.php?title=LXF80:Unix_API&diff=3524&oldid=prevYaleks: «LXF80:Linux API» переименована в «LXF80:Unix API»: унификация2008-03-27T05:27:36Z<p>«<a href="/wiki/LXF80:Linux_API" class="mw-redirect" title="LXF80:Linux API">LXF80:Linux API</a>» переименована в «<a href="/wiki/LXF80:Unix_API" title="LXF80:Unix API">LXF80:Unix API</a>»: унификация</p>
<table class='diff diff-contentalign-left'>
<tr valign='top'>
<td colspan='1' style="background-color: white; color:black;">← Предыдущая</td>
<td colspan='1' style="background-color: white; color:black;">Версия 05:27, 27 марта 2008</td>
</tr></table>Yalekshttp://wiki.linuxformat.ru/wiki/index.php?title=LXF80:Unix_API&diff=3523&oldid=prevYaleks: шаблон2008-03-27T05:27:14Z<p>шаблон</p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black;">Версия 05:27, 27 марта 2008</td>
</tr><tr><td colspan="2" class="diff-lineno">Строка 1:</td>
<td colspan="2" class="diff-lineno">Строка 1:</td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">{{цикл/Unix API}}</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>УЧЕБНИК Программирование для Linux</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>УЧЕБНИК Программирование для Linux</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
</table>Yalekshttp://wiki.linuxformat.ru/wiki/index.php?title=LXF80:Unix_API&diff=3501&oldid=prevDomostroitel в 18:40, 26 марта 20082008-03-26T18:40:36Z<p></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Предыдущая</td>
<td colspan='2' style="background-color: white; color:black;">Версия 18:40, 26 марта 2008</td>
</tr><tr><td colspan="2" class="diff-lineno">Строка 61:</td>
<td colspan="2" class="diff-lineno">Строка 61:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>{| <del class="diffchange diffchange-inline">class</del>=<del class="diffchange diffchange-inline">"standard"</del></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>{| <ins class="diffchange diffchange-inline">border </ins>= <ins class="diffchange diffchange-inline">1</ins></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>! Вызов</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>!<ins class="diffchange diffchange-inline">style="background-color:#EEEEFF;" |  </ins>Вызов</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>! Описание</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>!<ins class="diffchange diffchange-inline">style="background-color:#EEEEFF;" |  </ins>Описание</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>! Дополнительный параметр</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>!<ins class="diffchange diffchange-inline">style="background-color:#EEEEFF;" |  </ins>Дополнительный параметр</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 121:</td>
<td colspan="2" class="diff-lineno">Строка 121:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>{| <del class="diffchange diffchange-inline">class</del>=<del class="diffchange diffchange-inline">"standard"</del></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>{| <ins class="diffchange diffchange-inline">border</ins>=<ins class="diffchange diffchange-inline">1</ins></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>! Элемент  </div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>!<ins class="diffchange diffchange-inline">style="background-color:#EEEEFF;" |  </ins>Элемент  </div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>! Тип</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>!<ins class="diffchange diffchange-inline">style="background-color:#EEEEFF;" |  </ins>Тип</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>! Содержание</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>!<ins class="diffchange diffchange-inline">style="background-color:#EEEEFF;" |  </ins>Содержание</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Строка 294:</td>
<td colspan="2" class="diff-lineno">Строка 294:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>{| <del class="diffchange diffchange-inline">class</del>=<del class="diffchange diffchange-inline">"standard"</del></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>{| <ins class="diffchange diffchange-inline">border</ins>=<ins class="diffchange diffchange-inline">1</ins></div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>! Поле</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>!<ins class="diffchange diffchange-inline">style="background-color:#EEEEFF;" |  </ins>Поле</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>! Тип</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>!<ins class="diffchange diffchange-inline">style="background-color:#EEEEFF;" |  </ins>Тип</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>|-</div></td></tr>
</table>Domostroitelhttp://wiki.linuxformat.ru/wiki/index.php?title=LXF80:Unix_API&diff=3468&oldid=prevDomostroitel: Новая: УЧЕБНИК Программирование для Linux == Linux API – работаем с файловой системой == '''ЧАСТЬ 1 ''' ''Как известно, в...2008-03-26T11:21:13Z<p>Новая: УЧЕБНИК Программирование для Linux == Linux API – работаем с файловой системой == '''ЧАСТЬ 1 ''' ''Как известно, в...</p>
<a href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF80:Unix_API&diff=3468">Внесённые изменения</a>Domostroitel