代码之家  ›  专栏  ›  技术社区  ›  Julian Fondren

从自由线性对象接收的结构的生命周期是多少?

ats
  •  0
  • Julian Fondren  · 技术社区  · 6 年前

    考虑:

    #include "share/atspre_staload.hats"
    
    %{^
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    %}
    typedef statbuf = $extype "struct stat"
    extern fun cstat: (string, &statbuf? >> statbuf) -> int = "mac#stat"
    extern fun S_ISDIR: int -> bool = "mac#"
    extern fun stat_mode: statbuf -> int = "mac#stat_mode"
    %{
    #define stat_mode(x) x.st_mode
    %}
    
    datavtype statbuf_vt = STAT of statbuf
    
    fun stat(path: string): Option_vt(statbuf_vt) =
        let
            val buf = STAT(_)
            val STAT(hole) = buf
            val res = cstat(path, hole)
            prval _ = fold@(buf)
        in
            if res = 0 then Some_vt(buf)
            else
                let
                    val ~STAT(_) = buf
                in
                    None_vt()
                end
        end
    
    implement main0() =
        let
            val path = "/etc/passwd"
            val- ~Some_vt(~STAT(buf)) = stat(path)
        in
            println!(~S_ISDIR(stat_mode(buf)))
        end
    

    buf 最后?它似乎不需要被释放——瓦尔格林看到3个alloc和3个free,没有问题。但不是吗 缓冲器 由它管理的部分内存 STAT 线性物体?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Hongwei Xi    6 年前