[[PageOutline]] = Distributed data management = BOINC provides features for implementing distributed data management systems. Such a system is implemented as several components: * A "plug-in" to the BOINC scheduler, which is called on each scheduler RPC; * A daemon program that handles timeouts; * Interface programs, for example, programs allowing users to submit and retrieve files. Note: to use these features, you must include {{{ }}} in your config.xml. == Sending files to hosts == From an interface program or daemon, call {{{ int send_file(int host_id, const char* file_name) }}} or use the command line program {{{ send_file --host_id X --file_name Y }}} From the scheduler plugin, call {{{ int send_file_sched(const char* filename); }}} == Retrieving files == From an interface program or daemon, call {{{ int get_file(int host_id, const char* file_name) }}} or use the command line program {{{ get_file --host_id X --file_name Y }}} From the scheduler plugin, call {{{ int get_file_sched(const char* filename); }}} == Deleting files == From an interface program or daemon, call {{{ int delete_file(int host_id, const char* file_name) }}} or use the command line program {{{ delete_file -host_id X -file_name Y }}} From the scheduler plugin, call {{{ int delete_file_sched(const char* filename); }}} == Implementation == From interface programs, '''put_file''' and '''get_file''' create a message to the host (in the msg_to_host table). The message is a chunk of XML that describes a "virtual" app and app version (with no associate executable), and a workunit and result that contain a single input or output file. The result has a name of the form '''file_xfer_*''', which tells the scheduler to treat it specially.