File: book.xml

package info (click to toggle)
php-doc 20140201-1
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 74,084 kB
  • ctags: 4,040
  • sloc: xml: 998,137; php: 20,812; cpp: 500; sh: 177; makefile: 63; awk: 28
file content (186 lines) | stat: -rw-r--r-- 4,839 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision: 318955 $ -->

<book xml:id="book.eio" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
 <title>Eio</title>
 <titleabbrev>Eio</titleabbrev>
<!--{{{ preface -->
 <preface xml:id="intro.eio">
  &reftitle.intro;
  <para>
   This extension provides asyncronous POSIX I/O by means of <link
   xlink:href="&url.eio.libeio;">libeio</link> C
   library written by Marc Lehmann.
  </para>

  &note.no-windows.extension;

  <para>

  <warning>
  <simpara>
  It is important to aware that each request is executed in a thread, and the
  order of execution of continuously queued requests basically is
  unpredictable. For instance, the following piece of code is incorrect.
  </simpara>
  </warning>

  <example>
  <title>Incorrect requests</title>
  <programlisting role="php"><![CDATA[
<?php
// Request to create symlink of $filename to $link
eio_symlink($filename, $link);

// Request to move $filename to $new_filename
eio_rename($filename, $new_filename);

// Process requests
eio_event_loop();
?>
]]>
   </programlisting>
   </example>

   In the example above <function>eio_rename</function> request may finish
   before <function>eio_symlink</function>. To fix it you might call <function>eio_rename</function>
   in the callback of <function>eio_symlink</function>:
  <example>
   <title>Calling request from a request callback</title>
   <programlisting role="php"><![CDATA[
<?php
function my_symlink_done($filename, $result) {
 // Request to move $filename to $new_filename
 eio_rename($filename, "/path/to/new-name");

 // Process requests
 eio_event_loop();
}

// Request to create symlink of $filename to $link
eio_symlink($filename, $link, EIO_PRI_DEFAULT, "my_symlink_done", $filename);

// Process requests
eio_event_loop();
?>
   ]]>
   </programlisting>
  </example>

  Alternatively, you might want to create a request group:

  <example>
   <title>Calling request from a request callback</title>
   <programlisting role="php"><![CDATA[
<?php
/* Is called when the group requests are done */
function my_grp_done($data, $result) {
 // ...
}

function my_symlink_done($filename, $result) {
 // Create eio_rename request and add it to the group
 $req = eio_rename($filename, "/path/to/new-name");
 eio_grp_add($grp, $req);
 // You might want to add more requests...
}

// Create a request group
$grp = eio_grp("my_grp_done", "my_grp_data");

// Create eio_symlink request and add it to the group
// Pass $filename to the callback
$req = eio_symlink($filename, $link,
  EIO_PRI_DEFAULT, "my_symlink_done", $filename);
eio_grp_add($grp, $req);

// Process requests
eio_event_loop();
?>
]]></programlisting>
  </example>

  Group is a special kind of request that could accumulate a set of regular
  <emphasis>eio</emphasis> requests. This could be used to create a complex
  request that opens, reads and closes a file.
  </para>
  <para>
  Since version 0.3.0 alpha, a variable used in communications with libeio
  internally, could be retrieved with
  <function>eio_get_event_stream</function>. The variable could be used
  to bind to an event loop supported by some other extension. You might
  organize a simple event loop where eio and libevent work together:
  <example>
   <title>Using eio with libevent</title>
   <programlisting role="php"><![CDATA[
<?php
function my_eio_poll($fd, $events, $arg) {
    /* Some libevent regulation might go here .. */
    if (eio_nreqs()) {
        eio_poll();
    }
    /* .. and here */
}

function my_res_cb($d, $r) {
    var_dump($r); var_dump($d);
}

$base = event_base_new();
$event = event_new();

// This stream is used to bind with libevent
$fd = eio_get_event_stream();

eio_nop(EIO_PRI_DEFAULT, "my_res_cb", "nop data");
eio_mkdir("/tmp/abc-eio-temp", 0750, EIO_PRI_DEFAULT, "my_res_cb", "mkdir data");
/* some other eio_* calls here ... */


// set event flags
event_set($event, $fd, EV_READ /*| EV_PERSIST*/, "my_eio_poll", array($event, $base));

// set event base 
event_base_set($event, $base);

// enable event
event_add($event);

// start event loop
event_base_loop($base);

/* The same will be available via buffered libevent interface */
?>
]]></programlisting>
  </example>

  </para>
 </preface>
<!--}}}-->
 &reference.eio.setup;
 &reference.eio.constants;
 &reference.eio.examples;
 &reference.eio.reference;

</book>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml fdm=marker
vi: ts=1 sw=1
-->