<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html xmlns:fn="http://www.w3.org/2005/02/xpath-functions"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" href="../../../../doc/otp_doc.css" type="text/css"> <title>Erlang -- ssh_sftp</title> </head> <body bgcolor="white" text="#000000" link="#0000ff" vlink="#ff00ff" alink="#ff0000"><div id="container"> <script id="js" type="text/javascript" language="JavaScript" src="../../../../doc/js/flipmenu/flipmenu.js"></script><script id="js2" type="text/javascript" src="../../../../doc/js/erlresolvelinks.js"></script><script language="JavaScript" type="text/javascript"> <!-- function getWinHeight() { var myHeight = 0; if( typeof( window.innerHeight ) == 'number' ) { //Non-IE myHeight = window.innerHeight; } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { //IE 6+ in 'standards compliant mode' myHeight = document.documentElement.clientHeight; } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { //IE 4 compatible myHeight = document.body.clientHeight; } return myHeight; } function setscrollpos() { var objf=document.getElementById('loadscrollpos'); document.getElementById("leftnav").scrollTop = objf.offsetTop - getWinHeight()/2; } function addEvent(obj, evType, fn){ if (obj.addEventListener){ obj.addEventListener(evType, fn, true); return true; } else if (obj.attachEvent){ var r = obj.attachEvent("on"+evType, fn); return r; } else { return false; } } addEvent(window, 'load', setscrollpos); //--></script><div id="leftnav"><div class="innertube"> <img alt="Erlang logo" src="../../../../doc/erlang-logo.png"><br><small><a href="index.html">Reference Manual</a><br><a href="release_notes.html">Release Notes</a><br><a href="../pdf/ssh-1.1.8.pdf">PDF</a><br><a href="../../../../doc/index.html">Top</a></small><p><strong>SSH</strong><br><strong>Reference Manual</strong><br><small>Version 1.1.8</small></p> <br><a href="javascript:openAllFlips()">Expand All</a><br><a href="javascript:closeAllFlips()">Contract All</a><p><small><strong>Table of Contents</strong></small></p> <ul class="flipMenu"> <li id="no" title="ssh " expanded="false">ssh<ul> <li><a href="ssh.html"> Top of manual page </a></li> <li title="close-1"><a href="ssh.html#close-1">close/1</a></li> <li title="connect-3"><a href="ssh.html#connect-3">connect/3</a></li> <li title="connect-4"><a href="ssh.html#connect-4">connect/4</a></li> <li title="connection_info-2"><a href="ssh.html#connection_info-2">connection_info/2</a></li> <li title="daemon-1"><a href="ssh.html#daemon-1">daemon/1</a></li> <li title="daemon-2"><a href="ssh.html#daemon-2">daemon/2</a></li> <li title="daemon-3"><a href="ssh.html#daemon-3">daemon/3</a></li> <li title="shell-1"><a href="ssh.html#shell-1">shell/1</a></li> <li title="shell-2"><a href="ssh.html#shell-2">shell/2</a></li> <li title="shell-3"><a href="ssh.html#shell-3">shell/3</a></li> <li title="start-0"><a href="ssh.html#start-0">start/0</a></li> <li title="start-1"><a href="ssh.html#start-1">start/1</a></li> <li title="stop-0"><a href="ssh.html#stop-0">stop/0</a></li> <li title="stop_daemon-1"><a href="ssh.html#stop_daemon-1">stop_daemon/1</a></li> <li title="stop_daemon-2"><a href="ssh.html#stop_daemon-2">stop_daemon/2</a></li> <li title="stop_listener-1"><a href="ssh.html#stop_listener-1">stop_listener/1</a></li> <li title="stop_listener-2"><a href="ssh.html#stop_listener-2">stop_listener/2</a></li> </ul> </li> <li id="no" title="ssh_channel " expanded="false">ssh_channel<ul> <li><a href="ssh_channel.html"> Top of manual page </a></li> <li title="call-2"><a href="ssh_channel.html#call-2">call/2</a></li> <li title="call-3"><a href="ssh_channel.html#call-3">call/3</a></li> <li title="cast-2"><a href="ssh_channel.html#cast-2">cast/2</a></li> <li title="enter_loop-1"><a href="ssh_channel.html#enter_loop-1">enter_loop/1</a></li> <li title="init-1"><a href="ssh_channel.html#init-1">init/1</a></li> <li title="reply-2"><a href="ssh_channel.html#reply-2">reply/2</a></li> <li title="start-4"><a href="ssh_channel.html#start-4">start/4</a></li> <li title="start_link-4"><a href="ssh_channel.html#start_link-4">start_link/4</a></li> <li title="CallbackModule:code_change-3"><a href="ssh_channel.html#CallbackModule:code_change-3">CallbackModule:code_change/3</a></li> <li title="CallbackModule:init-1"><a href="ssh_channel.html#CallbackModule:init-1">CallbackModule:init/1</a></li> <li title="CallbackModule:handle_call-3"><a href="ssh_channel.html#CallbackModule:handle_call-3">CallbackModule:handle_call/3</a></li> <li title="CallbackModule:handle_cast-2"><a href="ssh_channel.html#CallbackModule:handle_cast-2">CallbackModule:handle_cast/2</a></li> <li title="CallbackModule:handle_msg-2"><a href="ssh_channel.html#CallbackModule:handle_msg-2">CallbackModule:handle_msg/2</a></li> <li title="CallbackModule:handle_ssh_msg-2"><a href="ssh_channel.html#CallbackModule:handle_ssh_msg-2">CallbackModule:handle_ssh_msg/2</a></li> <li title="CallbackModule:terminate-2"><a href="ssh_channel.html#CallbackModule:terminate-2">CallbackModule:terminate/2</a></li> </ul> </li> <li id="no" title="ssh_connection " expanded="false">ssh_connection<ul> <li><a href="ssh_connection.html"> Top of manual page </a></li> <li title="adjust_window-3"><a href="ssh_connection.html#adjust_window-3">adjust_window/3</a></li> <li title="close-2"><a href="ssh_connection.html#close-2">close/2</a></li> <li title="exec-4"><a href="ssh_connection.html#exec-4">exec/4</a></li> <li title="exit_status-3"><a href="ssh_connection.html#exit_status-3">exit_status/3</a></li> <li title="reply_request-4"><a href="ssh_connection.html#reply_request-4">reply_request/4</a></li> <li title="send-3"><a href="ssh_connection.html#send-3">send/3</a></li> <li title="send-4"><a href="ssh_connection.html#send-4">send/4</a></li> <li title="send-4"><a href="ssh_connection.html#send-4">send/4</a></li> <li title="send-5"><a href="ssh_connection.html#send-5">send/5</a></li> <li title="send_eof-2"><a href="ssh_connection.html#send_eof-2">send_eof/2</a></li> <li title="session_channel-2"><a href="ssh_connection.html#session_channel-2">session_channel/2</a></li> <li title="session_channel-4"><a href="ssh_connection.html#session_channel-4">session_channel/4</a></li> <li title="setenv-5"><a href="ssh_connection.html#setenv-5">setenv/5</a></li> <li title="shell-2"><a href="ssh_connection.html#shell-2">shell/2</a></li> <li title="subsystem-4"><a href="ssh_connection.html#subsystem-4">subsystem/4</a></li> </ul> </li> <li id="loadscrollpos" title="ssh_sftp " expanded="true">ssh_sftp<ul> <li><a href="ssh_sftp.html"> Top of manual page </a></li> <li title="start_channel-1"><a href="ssh_sftp.html#start_channel-1">start_channel/1</a></li> <li title="start_channel-2"><a href="ssh_sftp.html#start_channel-2">start_channel/2</a></li> <li title="start_channel-2"><a href="ssh_sftp.html#start_channel-2">start_channel/2</a></li> <li title="start_channel-3"><a href="ssh_sftp.html#start_channel-3">start_channel/3</a></li> <li title="stop_channel-1"><a href="ssh_sftp.html#stop_channel-1">stop_channel/1</a></li> <li title="read_file-2"><a href="ssh_sftp.html#read_file-2">read_file/2</a></li> <li title="read_file-3"><a href="ssh_sftp.html#read_file-3">read_file/3</a></li> <li title="write_file-3"><a href="ssh_sftp.html#write_file-3">write_file/3</a></li> <li title="write_file-4"><a href="ssh_sftp.html#write_file-4">write_file/4</a></li> <li title="list_dir-2"><a href="ssh_sftp.html#list_dir-2">list_dir/2</a></li> <li title="list_dir-3"><a href="ssh_sftp.html#list_dir-3">list_dir/3</a></li> <li title="open-3"><a href="ssh_sftp.html#open-3">open/3</a></li> <li title="open-4"><a href="ssh_sftp.html#open-4">open/4</a></li> <li title="opendir-2"><a href="ssh_sftp.html#opendir-2">opendir/2</a></li> <li title="opendir-3"><a href="ssh_sftp.html#opendir-3">opendir/3</a></li> <li title="close-2"><a href="ssh_sftp.html#close-2">close/2</a></li> <li title="close-3"><a href="ssh_sftp.html#close-3">close/3</a></li> <li title="read-3"><a href="ssh_sftp.html#read-3">read/3</a></li> <li title="read-4"><a href="ssh_sftp.html#read-4">read/4</a></li> <li title="pread-4"><a href="ssh_sftp.html#pread-4">pread/4</a></li> <li title="pread-5"><a href="ssh_sftp.html#pread-5">pread/5</a></li> <li title="aread-3"><a href="ssh_sftp.html#aread-3">aread/3</a></li> <li title="apread-4"><a href="ssh_sftp.html#apread-4">apread/4</a></li> <li title="write-3"><a href="ssh_sftp.html#write-3">write/3</a></li> <li title="write-4"><a href="ssh_sftp.html#write-4">write/4</a></li> <li title="pwrite-4"><a href="ssh_sftp.html#pwrite-4">pwrite/4</a></li> <li title="pwrite-5"><a href="ssh_sftp.html#pwrite-5">pwrite/5</a></li> <li title="awrite-3"><a href="ssh_sftp.html#awrite-3">awrite/3</a></li> <li title="apwrite-4"><a href="ssh_sftp.html#apwrite-4">apwrite/4</a></li> <li title="position-3"><a href="ssh_sftp.html#position-3">position/3</a></li> <li title="position-4"><a href="ssh_sftp.html#position-4">position/4</a></li> <li title="read_file_info-2"><a href="ssh_sftp.html#read_file_info-2">read_file_info/2</a></li> <li title="read_file_info-3"><a href="ssh_sftp.html#read_file_info-3">read_file_info/3</a></li> <li title="read_link_info-2"><a href="ssh_sftp.html#read_link_info-2">read_link_info/2</a></li> <li title="read_link_info-3"><a href="ssh_sftp.html#read_link_info-3">read_link_info/3</a></li> <li title="write_file_info-3"><a href="ssh_sftp.html#write_file_info-3">write_file_info/3</a></li> <li title="write_file_info-4"><a href="ssh_sftp.html#write_file_info-4">write_file_info/4</a></li> <li title="read_link-2"><a href="ssh_sftp.html#read_link-2">read_link/2</a></li> <li title="read_link-3"><a href="ssh_sftp.html#read_link-3">read_link/3</a></li> <li title="make_symlink-3"><a href="ssh_sftp.html#make_symlink-3">make_symlink/3</a></li> <li title="make_symlink-4"><a href="ssh_sftp.html#make_symlink-4">make_symlink/4</a></li> <li title="rename-3"><a href="ssh_sftp.html#rename-3">rename/3</a></li> <li title="rename-4"><a href="ssh_sftp.html#rename-4">rename/4</a></li> <li title="delete-2"><a href="ssh_sftp.html#delete-2">delete/2</a></li> <li title="delete-3"><a href="ssh_sftp.html#delete-3">delete/3</a></li> <li title="make_dir-2"><a href="ssh_sftp.html#make_dir-2">make_dir/2</a></li> <li title="make_dir-3"><a href="ssh_sftp.html#make_dir-3">make_dir/3</a></li> <li title="del_dir-2"><a href="ssh_sftp.html#del_dir-2">del_dir/2</a></li> <li title="del_dir-3"><a href="ssh_sftp.html#del_dir-3">del_dir/3</a></li> </ul> </li> <li id="no" title="ssh_sftpd " expanded="false">ssh_sftpd<ul> <li><a href="ssh_sftpd.html"> Top of manual page </a></li> <li title="subsystem_spec-1"><a href="ssh_sftpd.html#subsystem_spec-1">subsystem_spec/1</a></li> </ul> </li> </ul> </div></div> <div id="content"> <div class="innertube"> <!-- refpage --><center><h1>ssh_sftp</h1></center> <h3>MODULE</h3> <div class="REFBODY">ssh_sftp</div> <h3>MODULE SUMMARY</h3> <div class="REFBODY">SFTP client.</div> <h3>DESCRIPTION</h3> <div class="REFBODY"><p> <p>This module implements an SFTP (SSH FTP) client. SFTP is a secure, encrypted file transfer service available for SSH.</p> </p></div> <h3><a name="id2262402">COMMON DATA TYPES </a></h3> <div class="REFBODY"> <p>Type definitions that are used more than once in this module and/or abstractions to indicate the intended use of the data type: </p> <p><span class="code">ssh_connection_ref() - opaque to the user returned by ssh:connect/3</span></p> <p><span class="code">timeout() = infinity | integer() - in milliseconds.</span></p> </div> <h3><a name="id2262427">TIMEOUTS </a></h3> <div class="REFBODY"> <p>If the request functions for the sftp channel return {error, timeout} it does not mean that the request did not reach the server and was not performed, it only means that we did not receive an answer from the server within the time that was expected.</p> </div> <h3>EXPORTS</h3> <p><a name="start_channel-1"><span class="bold_code">start_channel(ConnectionRef) -> </span></a><br><a name="start_channel-2"><span class="bold_code">start_channel(ConnectionRef, Options) -> </span></a><br><a name="start_channel-2"><span class="bold_code">start_channel(Host, Options) -></span></a><br><a name="start_channel-3"><span class="bold_code">start_channel(Host, Port, Options) -> {ok, Pid} | {ok, Pid, ConnectionRef} | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">Host = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">ConnectionRef = ssh_connection_ref()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Port = integer()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Options = [{Option, Value}]</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>If not provided, setups a ssh connection in this case a connection reference will be returned too. A ssh channel process is started to handle the communication with the SFTP server, the returned pid for this process should be used as input to all other API functions in this module.</p> <p>Options are:</p> <dl> <dt><strong><span class="code">{timeout, timeout()}</span></strong></dt> <dd> <p>The timeout is passed to the ssh_channel start function, and defaults to infinity.</p> </dd> </dl> <p>All other options are directly passed to <span class="bold_code"><a href="ssh.html">ssh:connect/3</a></span> or ignored if a connection is already provided. </p> </p></div> <p><a name="stop_channel-1"><span class="bold_code">stop_channel(ChannelPid) -> ok</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> </div> <div class="REFBODY"><p> <p>Stops a sftp channel. If the ssh connection should be closed call <span class="bold_code"><a href="ssh.html">ssh:close/1</a></span>.</p> </p></div> <p><a name="read_file-2"><span class="bold_code">read_file(ChannelPid, File) -> </span></a><br><a name="read_file-3"><span class="bold_code">read_file(ChannelPid, File, Timeout) -> {ok, Data} | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">File = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Data = binary()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Timeout = timeout()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Reads a file from the server, and returns the data in a binary, like <span class="code">file:read_file/1</span>.</p> </p></div> <p><a name="write_file-3"><span class="bold_code">write_file(ChannelPid, File, Iolist) -> </span></a><br><a name="write_file-4"><span class="bold_code">write_file(ChannelPid, File, Iolist, Timeout) -> ok | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">File = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Iolist = iolist()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Timeout = timeout()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Writes a file to the server, like <span class="code">file:write_file/2</span>. The file is created if it's not there.</p> </p></div> <p><a name="list_dir-2"><span class="bold_code">list_dir(ChannelPid, Path) -> </span></a><br><a name="list_dir-3"><span class="bold_code">list_dir(ChannelPid, Path, Timeout) -> {ok, Filenames} | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Path = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Filenames = [Filename]</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Filename = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Timeout = timeout()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Lists the given directory on the server, returning the filenames as a list of strings.</p> </p></div> <p><a name="open-3"><span class="bold_code">open(ChannelPid, File, Mode) -> </span></a><br><a name="open-4"><span class="bold_code">open(ChannelPid, File, Mode, Timeout) -> {ok, Handle} | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">File = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Mode = [Modeflag]</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Modeflag = read | write | creat | trunc | append | binary</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Timeout = timeout()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Handle = term()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Opens a file on the server, and returns a handle that is used for reading or writing.</p> </p></div> <p><a name="opendir-2"><span class="bold_code">opendir(ChannelPid, Path) -> </span></a><br><a name="opendir-3"><span class="bold_code">opendir(ChannelPid, Path, Timeout) -> {ok, Handle} | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Path = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Timeout = timeout()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Opens a handle to a directory on the server, the handle is used for reading directory contents.</p> </p></div> <p><a name="close-2"><span class="bold_code">close(ChannelPid, Handle) -> </span></a><br><a name="close-3"><span class="bold_code">close(ChannelPid, Handle, Timeout) -> ok | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Handle = term()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Timeout = timeout()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Closes a handle to an open file or directory on the server.</p> </p></div> <p><a name="read-3"><span class="bold_code">read(ChannelPid, Handle, Len) -> </span></a><br><a name="read-4"><span class="bold_code">read(ChannelPid, Handle, Len, Timeout) -> {ok, Data} | eof | {error, Error}</span></a><br><a name="pread-4"><span class="bold_code">pread(ChannelPid, Handle, Position, Len) -> </span></a><br><a name="pread-5"><span class="bold_code">pread(ChannelPid, Handle, Position, Len, Timeout) -> {ok, Data} | eof | {error, Error}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Handle = term()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Position = integer()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Len = integer()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Timeout = timeout()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Data = string() | binary()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Reads <span class="code">Len</span> bytes from the file referenced by <span class="code">Handle</span>. Returns <span class="code">{ok, Data}</span>, or <span class="code">eof</span>, or <span class="code">{error, Reason}</span>. If the file is opened with <span class="code">binary</span>, <span class="code">Data</span> is a binary, otherwise it is a string.</p> <p>If the file is read past eof, only the remaining bytes will be read and returned. If no bytes are read, <span class="code">eof</span> is returned.</p> <p>The <span class="code">pread</span> function reads from a specified position, combining the <span class="code">position</span> and <span class="code">read</span> functions.</p> </p></div> <p><a name="aread-3"><span class="bold_code">aread(ChannelPid, Handle, Len) -> {async, N} | {error, Error}</span></a><br><a name="apread-4"><span class="bold_code">apread(ChannelPid, Handle, Position, Len) -> {async, N} | {error, Error}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Handle = term()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Position = integer()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Len = integer()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">N = term()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Reads from an open file, without waiting for the result. If the handle is valid, the function returns <span class="code">{async, N}</span>, where N is a term guaranteed to be unique between calls of <span class="code">aread</span>. The actual data is sent as a message to the calling process. This message has the form <span class="code">{async_reply, N, Result}</span>, where <span class="code">Result</span> is the result from the read, either <span class="code">{ok, Data}</span>, or <span class="code">eof</span>, or <span class="code">{error, Error}</span>.</p> <p>The <span class="code">apread</span> function reads from a specified position, combining the <span class="code">position</span> and <span class="code">aread</span> functions.</p> </p></div> <p><a name="write-3"><span class="bold_code">write(ChannelPid, Handle, Data) -></span></a><br><a name="write-4"><span class="bold_code">write(ChannelPid, Handle, Data, Timeout) -> ok | {error, Error}</span></a><br><a name="pwrite-4"><span class="bold_code">pwrite(ChannelPid, Handle, Position, Data) -> ok </span></a><br><a name="pwrite-5"><span class="bold_code">pwrite(ChannelPid, Handle, Position, Data, Timeout) -> ok | {error, Error}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Handle = term()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Position = integer()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Data = iolist()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Timeout = timeout()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Write <span class="code">data</span> to the file referenced by <span class="code">Handle</span>. The file should be opened with <span class="code">write</span> or <span class="code">append</span> flag. Returns <span class="code">ok</span> if successful and <span class="code">{error, Reason}</span> otherwise.</p> <p>Typical error reasons are:</p> <dl> <dt><strong><span class="code">ebadf</span></strong></dt> <dd> <p>The file is not opened for writing.</p> </dd> <dt><strong><span class="code">enospc</span></strong></dt> <dd> <p>There is a no space left on the device.</p> </dd> </dl> </p></div> <p><a name="awrite-3"><span class="bold_code">awrite(ChannelPid, Handle, Data) -> ok | {error, Reason} </span></a><br><a name="apwrite-4"><span class="bold_code">apwrite(ChannelPid, Handle, Position, Data) -> ok | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Handle = term()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Position = integer()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Len = integer()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Data = binary()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Timeout = timeout()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Writes to an open file, without waiting for the result. If the handle is valid, the function returns <span class="code">{async, N}</span>, where N is a term guaranteed to be unique between calls of <span class="code">awrite</span>. The result of the <span class="code">write</span> operation is sent as a message to the calling process. This message has the form <span class="code">{async_reply, N, Result}</span>, where <span class="code">Result</span> is the result from the write, either <span class="code">ok</span>, or <span class="code">{error, Error}</span>.</p> <p>The <span class="code">apwrite</span> writes on a specified position, combining the <span class="code">position</span> and <span class="code">awrite</span> operations.</p> </p></div> <p><a name="position-3"><span class="bold_code">position(ChannelPid, Handle, Location) -> </span></a><br><a name="position-4"><span class="bold_code">position(ChannelPid, Handle, Location, Timeout) -> {ok, NewPosition | {error, Error}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Handle = term()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Location = Offset | {bof, Offset} | {cur, Offset} | {eof, Offset} | bof | cur | eof</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Offset = int()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Timeout = timeout()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">NewPosition = integer()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Sets the file position of the file referenced by <span class="code">Handle</span>. Returns <span class="code">{ok, NewPosition</span> (as an absolute offset) if successful, otherwise <span class="code">{error, Reason}</span>. <span class="code">Location</span> is one of the following:</p> <dl> <dt><strong><span class="code">Offset</span></strong></dt> <dd> <p>The same as <span class="code">{bof, Offset}</span>.</p> </dd> <dt><strong><span class="code">{bof, Offset}</span></strong></dt> <dd> <p>Absolute offset.</p> </dd> <dt><strong><span class="code">{cur, Offset}</span></strong></dt> <dd> <p>Offset from the current position.</p> </dd> <dt><strong><span class="code">{eof, Offset}</span></strong></dt> <dd> <p>Offset from the end of file.</p> </dd> <dt><strong><span class="code">bof | cur | eof</span></strong></dt> <dd> <p>The same as above with <span class="code">Offset</span> 0.</p> </dd> </dl> </p></div> <p><a name="read_file_info-2"><span class="bold_code">read_file_info(ChannelPid, Name) -> </span></a><br><a name="read_file_info-3"><span class="bold_code">read_file_info(ChannelPid, Name, Timeout) -> {ok, FileInfo} | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Name = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Handle = term()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Timeout = timeout()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">FileInfo = record()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Returns a <span class="code">file_info</span> record from the file specified by <span class="code">Name</span> or <span class="code">Handle</span>, like <span class="code">file:read_file_info/2</span>.</p> </p></div> <p><a name="read_link_info-2"><span class="bold_code">read_link_info(ChannelPid, Name) -> {ok, FileInfo} | {error, Reason}</span></a><br><a name="read_link_info-3"><span class="bold_code">read_link_info(ChannelPid, Name, Timeout) -> {ok, FileInfo} | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Name = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Handle = term()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Timeout = timeout()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">FileInfo = record()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Returns a <span class="code">file_info</span> record from the symbolic link specified by <span class="code">Name</span> or <span class="code">Handle</span>, like <span class="code">file:read_link_info/2</span>.</p> </p></div> <p><a name="write_file_info-3"><span class="bold_code">write_file_info(ChannelPid, Name, Info) -> </span></a><br><a name="write_file_info-4"><span class="bold_code">write_file_info(ChannelPid, Name, Info, Timeout) -> ok | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Name = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Info = record()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Timeout = timeout()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Writes file information from a <span class="code">file_info</span> record to the file specified by <span class="code">Name</span>, like <span class="code">file:write_file_info</span>.</p> </p></div> <p><a name="read_link-2"><span class="bold_code">read_link(ChannelPid, Name) -> </span></a><br><a name="read_link-3"><span class="bold_code">read_link(ChannelPid, Name, Timeout) -> {ok, Target} | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Name = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Target = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Read the link target from the symbolic link specified by <span class="code">name</span>, like <span class="code">file:read_link/1</span>.</p> </p></div> <p><a name="make_symlink-3"><span class="bold_code">make_symlink(ChannelPid, Name, Target) -> </span></a><br><a name="make_symlink-4"><span class="bold_code">make_symlink(ChannelPid, Name, Target, Timeout) -> ok | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Name = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Target = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Creates a symbolic link pointing to <span class="code">Target</span> with the name <span class="code">Name</span>, like <span class="code">file:make_symlink/2</span>.</p> </p></div> <p><a name="rename-3"><span class="bold_code">rename(ChannelPid, OldName, NewName) -> </span></a><br><a name="rename-4"><span class="bold_code">rename(ChannelPid, OldName, NewName, Timeout) -> ok | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">OldName = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">NewName = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Timeout = timeout()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Renames a file named <span class="code">OldName</span>, and gives it the name <span class="code">NewName</span>, like <span class="code">file:rename/2</span></p> </p></div> <p><a name="delete-2"><span class="bold_code">delete(ChannelPid, Name) -> </span></a><br><a name="delete-3"><span class="bold_code">delete(ChannelPid, Name, Timeout) -> ok | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Name = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Timeout = timeout()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Deletes the file specified by <span class="code">Name</span>, like <span class="code">file:delete/1</span></p> </p></div> <p><a name="make_dir-2"><span class="bold_code">make_dir(ChannelPid, Name) -> </span></a><br><a name="make_dir-3"><span class="bold_code">make_dir(ChannelPid, Name, Timeout) -> ok | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Name = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Timeout = timeout()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Creates a directory specified by <span class="code">Name</span>. <span class="code">Name</span> should be a full path to a new directory. The directory can only be created in an existing directory.</p> </p></div> <p><a name="del_dir-2"><span class="bold_code">del_dir(ChannelPid, Name) -> </span></a><br><a name="del_dir-3"><span class="bold_code">del_dir(ChannelPid, Name, Timeout) -> ok | {error, Reason}</span></a><br></p> <div class="REFBODY"> <p>Types:</p> <div class="REFTYPES"> <span class="bold_code">ChannelPid = pid()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Name = string()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Timeout = timeout()</span><br> </div> <div class="REFTYPES"> <span class="bold_code">Reason = term()</span><br> </div> </div> <div class="REFBODY"><p> <p>Deletes a directory specified by <span class="code">Name</span>. The directory should be empty.</p> </p></div> </div> <div class="footer"> <hr> <p>Copyright © 2005-2010 Ericsson AB. All Rights Reserved.</p> </div> </div> </div></body> </html>