文档手册

模块 @sys

2024-07-18 17:28:48

模块 @sys

此模块包含基于 NodeJS 原语建模的运行时方法。

要获取对 sys 模块的引用,请使用:

import * as sys from "@sys"; // '@' is mandatory

sys 模块中的所有方法都遵循 NodeJS 调用约定,唯一的例外是 - 不使用回调 - 函数返回 promise,因此在异步函数中使用它们,例如:

const p = new sys.Pipe();

async function connect() {
await p.connect('fooapp');
console.log(`Connected to ${p.getpeername()}`);
...
}

sys 建立在 Sciter.JS 内部使用的 libuv 和 txiki 项目的 QuickJS/libuv 包装器之上。

sys.fs namespace - 文件系统。

 功能

  • fs.open(path:string, flags:string [, mode:integer]): Promise(File)

  •  在路径处打开文件。

     flags : 字符串

    mode 设置文件模式(权限和粘滞位)(如果创建了文件)。默认值:0o666(可读和可写)

    回报:将通过 fs 兑现的承诺。File 对象。

    有关更多详细信息,请参阅 POSIX open() 文档。

    某些字符 ( < > : " / \ | ? * ) 在 Windows 下保留,如命名文件、路径和命名空间中所述。在 NTFS 下,如果文件名包含冒号,Node.js将打开文件系统流,如此 MSDN 页所述。

    • “a”:打开文件进行追加。如果文件不存在,则创建该文件。

    • “ax”:与“a”类似,但如果路径存在,则失败。

    • 'a+':打开文件进行读取和追加。如果文件不存在,则创建该文件。

    • “ax+”:类似于“a+”,但如果路径存在,则失败。

    • “as”:打开文件以同步模式追加。如果文件不存在,则创建该文件。

    • “as+”:打开文件以同步模式读取和追加。如果文件不存在,则创建该文件。

    • 'r':默认值,打开文件进行读取。如果文件不存在,则会发生异常。

    • “r+”:打开文件进行读取和写入。如果文件不存在,则会发生异常。

    • “rs+”:打开文件以同步模式进行读写。指示操作系统绕过本地文件系统缓存。

      这主要用于在 NFS 挂载上打开文件,因为它允许跳过可能过时的本地缓存。它对 I/O 性能有非常实际的影响,因此除非需要,否则不建议使用此标志。

      这不会将 fs.open() 或 fsPromises.open() 变成同步阻塞调用。如果需要同步操作,则应使用类似 fs.$open() 的东西。

    • 'w':打开文件进行写入。文件被创建(如果不存在)或被截断(如果存在)。

    • 'wx':与“w”类似,但如果路径存在,则失败。

    • 'w+':打开文件进行读取和写入。文件被创建(如果不存在)或被截断(如果存在)。

    • “wx+”:类似于“w+”,但如果路径存在,则失败。

  • fs.sync.open(path:string, flags:string [, mode:integer]): File

  • fs.openSync(path:string, flags:string [, mode:integer]): File

  • fs.open() 同步版本。返回 fs。文件对象,见下文。

  • fs.stat(path:string): Promise(stat)

  • 返回解析为具有以下字段的统计信息结构(对象)的 promise:

      int64     st_dev;      /* ID of device containing file */
     int64     st_ino;      /* inode number */
     int32     st_mode;     /* ORed type flags (see below) */
     int64     st_nlink;    /* number of hard links */
     int64     st_uid;      /* user ID of owner */
     int64     st_gid;      /* group ID of owner */
     int64     st_rdev;     /* device ID (if special file) */
     int64     st_size;     /* total size, in bytes */
     int64     st_blksize;  /* blocksize for file system I/O */
     int64     st_blocks;   /* number of 512B blocks allocated */
     float64   st_atime;    /* time of last access, seconds since 1970 */
     float64   st_mtime;    /* time of last modification, seconds since 1970 */
     float64   st_ctime;    /* time of last status change, seconds since 1970 */
     float64   st_birthtime;/* time of creation, seconds since 1970 */
  •  类型标志(st_mode):

    如果 file/dir 不存在,则引发 Error 异常。

    此外,统计结构可能具有以下之一:

    • isFile ,true 是一个文件

    • isDirectory ,true 是一个目录

    • isSymbolicLink ,true 是一个链接

    • fs.S_IFDIR - 这是目录文件的文件类型常量;

    • fs.S_IFCHR - 这是面向字符的设备文件的文件类型常量;

    • fs.S_IFBLK - 这是面向块的设备文件的文件类型常量;

    • fs.S_IFREG - 这是常规文件的文件类型常量;

    • fs.S_IFLNK - 这是符号链接的文件类型常量;

    • fs.S_IFSOCK - 这是套接字的文件类型常量;

    • fs.S_IFIFO - 这是FIFO或管道的文件类型常量;

  • fs.sync.stat(path:string): stat

  • fs.statSync(path:string): stat


  • 上述的同步版本;

    上述的同步版本。如果 file/dir 不存在,则返回 null。

  • fs.lstat(path:string): promise(stat)

  • lstat() 与 stat() 相同,只是如果 path 是符号链接,则链接本身是 stat-ed,而不是它引用的文件。

     请参见 lstat

  • fs.sync.lstat(path:string): stat

  • fs.lstatSync(path:string): stat

  • 上述的同步版本。

  • fs.realpath(pathname:string):string

  • 返回规范化的绝对路径名。

    realpath() 展开所有符号链接并解析对 /.//../ 引用以及 路径名字符串中的其他 '/' 字符,以生成规范化的绝对路径名。

  • fs.unlink(path:string) : Promise

  • 删除文件。如果 path 引用符号链接,则删除该链接,而不会影响该链接引用的文件或目录。如果路径引用的文件路径不是符号链接,则删除该文件。有关详细信息,请参阅 POSIX 取消链接文档。

     async function deleteFile(path) { await sys.fs.unlink(path) }

    fs.sync.unlink(path:string)

    fs.unlinkSync(path:string)

    fs.rename(oldPath:string,newPath:string) : Promise

  • 重命名文件。注意:这可能会将文件移动到其他设备。等同于重命名。

  • fs.renameSync(oldPath:string,newPath:string)

  • fs.sync.rename(oldPath:string,newPath:string)

    fs.mkdtemp(template:string) : Promise(result:string)

  • 创建唯一的临时目录。模板的最后六个字符必须为“XXXXXX”。相当于 mkdtemp

  • fs.mkstemp(template:string) : Promise

  • 创建唯一的临时文件。模板的最后六个字符必须为“XXXXXX”

  • fs.rmdir(path) : Promise

  •  删除文件夹

  • fs.sync.rmdir(path)

  • fs.rmdirSync(path)

  • 同步删除文件夹

  • fs.mkdir(path[, mode = 0o777]) : Promise

  •  创建文件夹。

  • fs.sync.mkdir(path[, mode = 0o777])

  • fs.mkdirSync(path[, mode = 0o777])

  • 创建文件夹(同步)

  • fs.chmod(path, mode:int]) : Promise

  •  异步 chmod。

  • fs.sync.chmod(path, mode:int])

  • fs.chmodSync(path, mode:int])

  • 同步 chmod。在发生错误时引发异常。

  • fs.copyfile(srcpath,dstpath[,flags:int]) : Promise

  •  异步文件复制。

    标志(可选)是以下各项的组合:

    • fs.UV_FS_COPYFILE_EXCL - 如果目标已存在,则返回错误;

    • fs.UV_FS_COPYFILE_FICLONE - 若要尝试创建 reflink,如果不支持写入时复制,则使用回退复制机制。

    • fs.UV_FS_COPYFILE_FICLONE_FORCE - 若要尝试创建 reflink,如果不支持 copy-on-write,则返回错误。

  • fs.sync.copyfile(srcpath,dstpath[,flags:int])

  • fs.copyfileSync(srcpath,dstpath[,flags:int])

    fs.readdir(path:string) : Promise(Dir)

    异步读取路径目录。promise 解析为 Dir 对象 - direntry 结构列表:

    { 
    name: string, // local file name + extension
    type: integer, // ORed flags (see below)
    }

    该列表不包含“.”和“..”条目。

     目录类型位标志:

    • fs.UV_DIRENT_UNKNOWN

    •   fs.UV_DIRENT_FILE -文件

    •   fs.UV_DIRENT_DIR -目录

    •   fs.UV_DIRENT_LINK -链接

    •   fs.UV_DIRENT_FIFO - FIFO设备

    •   fs.UV_DIRENT_SOCKET -插座

    • fs.UV_DIRENT_CHAR - 像终端一样的字符流设备

    •   fs.UV_DIRENT_BLOCK - 块设备

    for await (const {name,type} of readdir("path")) {
     ...  
    }
  • fs.sync.readdir(path:string): filelist

  • fs.readdirSync(path:string): filelist

  • 返回目录结构列表的 fs.readdir() 同步版本。如果 path 不是文件夹,则返回 null。

  • fs.readFile(path:string) : Promise(ArrayBuffer)

  • fs.readfile(path:string) : Promise(ArrayBuffer)

    异步读取整个文件。承诺在成功或失败时解析为 ArrayBuffer:

    try {
    let data = await fs.readfile("D:/foo/bar.txt");
    let text = srt.decode(data,"utf-8");
    } catch () {
    ...
    }

    fs.sync.readFile() : ArrayBuffer

    fs.sync.readfile() : ArrayBuffer

    fs.readFileSync() : ArrayBuffer

    fs.readfileSync() : ArrayBuffer

  • fs.readFile(path:string) 上述的同步版本。在发生错误时引发异常。

  • sys.fs.watch()

  • 监视文件或文件夹的更改。包装 libuv::uv_fs_event_t。

    sys.fs.watch(path, callback) : WatchFS
     参数
    • path :字符串,要监视的文件夹或文件的路径;

    • callback : function(path: string, events: int) ,在文件夹中文件或文件发生更改时调用的回调函数。events 是两个标志的 OR 组合:

      •  0x01 - 重命名事件;

      •  0x02 - 更改事件;

     返回

    该函数返回一个 WatchFS 对象,该对象具有:

    • watch.path 、property、string、read-only : sys.fs.watch() 调用 with 的原始路径;

    • watch.close() 、 方法 :调用它停止手表操作; 注意

    如果在一个文件夹上使用, sys.fs.watch() 将对这个文件夹的内容和其中的子文件夹进行深度监控。

     注意

    建议在退出前调用 watch.close() 所有活动监视器。

    如果要监视的路径不存在,则 Error 抛出。

  • fs.splitpath()

  • 该函数拆分目录和文件部分的路径:

    sys.fs.splitpath(path:string) : [dirpath:string, file:string]
     参数
    • path :字符串,文件夹或文件的路径;

     返回

    该函数返回 pair(两个元素的数组):

    • [0] ,字符串,dir 的路径,不带尾随 '/';

    • [1] 、字符串、文件部分 - 名称和扩展名;

     注意

    使用 dirname()basename() 在 Posix 上。 _splitpath() 在 Windows 上。

     类

    fs.File class - 表示文件。

    • file.read([lengthToRead:int [, filePosition:int]]): Promise(Uint8Array)

    • file.readSync([lengthToRead:int [, filePosition:int]]): Uint8Array

    • file.write(string|***Array|ArrayBuffer[,filePosition:int]) : Promise(result:int)

    • file.writeSync(string|***Array|ArrayBuffer[,filePosition:int]) : int

    • file.close() : Promise(undefined)

    • 'file.closeSync() : 未定义

    • file.fileno() : int

    • file.stat() : Promise(object)

    • file.path : string

    司 司长。Dir 类 - 目录访问者

    • dir.close()

    • dir.path

    • dir.next()

    • [async iterator]

     网络功能

     TCP 套接字类

    • socket.close()

    • socket.read():Promise(data)

    • socket.write(data:TypedArray | ArrayBuffer):Promise

    • socket.shutdown()

    • socket.fileno()

    • socket.listen([backlog:int])

    • socket.accept():Promise(socket)

    • socket.getsockname(): {ip:...,port:...,family:...}

    • socket.getpeername(): {ip:...,port:...,family:...}

    • socket.connect({ip:...,port:...})

    • socket.bind({ip:...,port:...})

     UDP 套接字类

    • socket.close()

    • socket.recv():Promise({data,flags:int,addr:{ip:...,port:...}})

    • socket.send(data:TypedArray | ArrayBuffer [,{ip,port}])

    • socket.fileno()

    • socket.getsockname(): {ip:...,port:...,family:...}

    • socket.getpeername(): {ip:...,port:...,family:...}

    • socket.connect({ip:...,port:...}):Promise

    • socket.bind({ip:...,port:...})

    管道 - 主要是IPC

    • socket.close()

    • socket.read()

    • socket.write(data:TypedArray | ArrayBuffer)

    • socket.fileno()

    • socket.listen([backlog:int])

    • socket.accept():Promise(socket)

    • socket.getsockname():string

    • socket.getpeername():string

    • socket.connect(name:string):Promise

    • socket.bind(name:string)

     TTY 基元

    • tty.close()

    • tty.read()

    • tty.write()

    • tty.fileno()

    • tty.setMode()

    • tty.getWinSize()

    sys.spawn() - 使用 stdin/strout/stderr 重定向运行进程。

    • process.kill()

    • process.wait()

    • process.pid

    • process.stdin

    • process.stdout

    • process.stderr

    sys.****

     其他功能:

    • sys.hrtime()

    • sys.gettimeofday()

    • sys.uname()

    • sys.isatty()

    • sys.environ()

    • sys.getenv()

    • sys.setenv()

    • sys.unsetenv()

    • sys.cwd() - 获取当前工作目录

    • sys.homedir()

    • sys.tmpdir()

    • sys.exepath()

    • sys.random(