diff --git a/README.md b/README.md index f300ac3..88c94c4 100644 --- a/README.md +++ b/README.md @@ -294,6 +294,10 @@ var fs = new Filer.FileSystem(); * [fs.close(fd, callback)](#close) * [fs.open(path, flags, [mode], callback)](#open) * [fs.utimes(path, atime, mtime, callback)](#utimes) +* [fs.chown(path, uid, gid, callback)](#chown) +* [fs.fchown(fd, uid, gid, callback)](#fchown) +* [fs.chmod(path, mode, callback)](#chmod) +* [fs.fchmod(fd, mode, callback)](#fchmod) * [fs.futimes(fd, atime, mtime, callback)](#fsutimes) * [fs.fsync(fd, callback)](#fsync) * [fs.write(fd, buffer, offset, length, position, callback)](#write) @@ -754,6 +758,89 @@ fs.open('/myfile.txt', function(err, fd) { }); ``` +#### fs.chown(path, uid, gid, callback) + +Changes the owner and group of a file. Asynchronous [chown(2)](http://pubs.opengroup.org/onlinepubs/009695399/functions/chown.html). Callback gets no additional arguments. Both `uid` (user id) and `gid` (group id) arguments should be a JavaScript Number. By default, `0x0` is used (i.e., `root:root` ownership). + +Example: + +```javascript +fs.chown('/myfile.txt', 500, 500, function(err) { + if(err) throw err; + + // /myfile.txt is now owned by user with id 500, group 500 +}); +``` + +#### fs.fchown(fd, uid, gid, callback) + +Changes the owner and group of a file. Asynchronous [chown(2)](http://pubs.opengroup.org/onlinepubs/009695399/functions/chown.html). Callback gets no additional arguments. Both `uid` (user id) and `gid` (group id) arguments should be a JavaScript Number. By default, `0x0` is used (i.e., `root:root` ownership). + +Example: + +```javascript +fs.open('/myfile.txt', function(err, fd) { + if(err) throw err; + + fs.fchown(fd, 500, 500, function(err) { + if(err) throw err; + + // /myfile.txt is now owned by user with id 500, group 500 + + fs.close(fd); + }); +}); +``` + +#### fs.chmod(path, mode, callback) + +Changes the mode of a file. Asynchronous [chmod(2)](http://pubs.opengroup.org/onlinepubs/009695399/functions/chmod.html). Callback gets no additional arguments. The `mode` argument should be a JavaScript Number, which combines file type and permission information. Here are a list of common values useful for setting the `mode`: + +* File type `S_IFREG=0x8000` +* Dir type `S_IFDIR=0x4000` +* Link type `S_IFLNK=0xA000` + +* Permissions `755=0x1ED` +* Permissions `644=0x1A4` +* Permissions `777=0x1FF` +* Permissions `666=0x1B6` + +By default, directories use `(0x4000 | 0x1ED)` and files use `(0x8000 | 0x1A4)`. + +Example: + +```javascript +// S_IFREG | 0o777 +var mode = 0x8000 | 0x1FF +fs.chmod('/myfile.txt', mode, function(err) { + if(err) throw err; + + // /myfile.txt is a regular file with permissions 777 +}); +``` + +#### fs.fchmod(fd, mode, callback) + +Changes the mode of a file. Asynchronous [chmod(2)](http://pubs.opengroup.org/onlinepubs/009695399/functions/chmod.html). Callback gets no additional arguments. The `mode` argument should be a JavaScript Number, which combines file type and permission information. By default, `755` (dir) and `644` (file) are used. + +Example: + +```javascript +fs.open('/myfile.txt', function(err, fd) { + if(err) throw err; + + // S_IFREG | 0o777 + var mode = 0x8000 | 0x1FF + fs.fchmod(fd, mode, function(err) { + if(err) throw err; + + // /myfile.txt is a regular file with permissions 777 + + fs.close(fd); + }); +}); +``` + #### fs.fsync(fd, callback) NOTE: Not yet implemented, see https://github.com/filerjs/filer/issues/87