<?php uv_fs_open(uv_default_loop(), "./tmp", UV::O_WRONLY | UV::O_CREAT | UV::O_APPEND, UV::S_IRWXU | UV::S_IRUSR, function ($r) { var_dump($r); uv_fs_write(uv_default_loop(), $r, "hello", 0, function ($a) use($r) { var_dump($a); var_dump("ok"); uv_fs_fdatasync(uv_default_loop(), $r, function () { echo "fsync finished"; }); }); }); uv_run();
<?php $socket = stream_socket_server("tcp://0.0.0.0:9999", $errno, $errstr); stream_set_blocking($socket, 0); $poll = uv_poll_init(uv_default_loop(), $socket); uv_poll_start($poll, UV::READABLE, function ($poll, $stat, $ev, $socket) { echo "parent poll:\n"; var_dump($stat); $conn = stream_socket_accept($socket); $pp = uv_poll_init(uv_default_loop(), $conn); uv_poll_start($pp, UV::WRITABLE, function ($poll, $stat, $ev, $conn) { echo " cb"; var_dump($stat); var_dump($conn); uv_poll_stop($poll); uv_fs_write(uv_default_loop(), $conn, "Hello World", -1, function ($conn, $nwrite) { var_dump($conn); fclose($conn); }); }); }); uv_run();
public function write($fd, $buffer, $position, $callback) { uv_fs_write($this->getEventLoop(), $fd, $buffer, $position, $callback); }
private function doPut($path, $contents) : \Generator { $flags = \UV::O_WRONLY | \UV::O_CREAT; $mode = \UV::S_IRWXU | \UV::S_IRUSR; $this->reactor->addRef(); $promise = $this->doFsOpen($path, $flags, $mode); if (!($fh = (yield $promise))) { $this->reactor->delRef(); throw new \RuntimeException("Failed opening write file handle"); } $promisor = new Deferred(); $len = strlen($contents); \uv_fs_write($this->loop, $fh, $contents, $offset = 0, function ($fh, $result) use($promisor, $len) { \uv_fs_close($this->loop, $fh, function () use($promisor, $result, $len) { $this->reactor->delRef(); if ($result < 0) { $promisor->fail(new \RuntimeException(uv_strerror($result))); } else { $promisor->succeed($len); } }); }); (yield new \Amp\CoroutineResult((yield $promisor->promise()))); }
private function doWrite($op) { $this->reactor->addRef(); $onWrite = function ($fh, $result) use($op) { $this->isActive = false; $this->reactor->delRef(); if ($result < 0) { $op->promisor->fail(new FilesystemException(\uv_strerror($result))); } else { StatCache::clear($this->path); $bytesWritten = \strlen($op->writeData); $this->pendingWriteOps--; $newPosition = $op->position + $bytesWritten; $delta = $newPosition - $this->position; $this->position = $this->mode[0] === "a" ? $this->position : $newPosition; $this->size += $delta; $op->promisor->succeed($result); } if ($this->queue) { $this->dequeue(); } }; \uv_fs_write($this->loop, $this->fh, $op->writeData, $op->position, $onWrite); }