美文网首页
文件描述符

文件描述符

作者: 追风骚年 | 来源:发表于2022-03-01 10:43 被阅读0次

文件描述符是操作系统暴露给应用程序操作文件的句柄,Linux 称为 fd,windows 称 handle。

文件重命名不影响文件的描述符。

package main

import (
    "fmt"
    "os"
    "strconv"
    "time"
)

func main() {
    fmt.Println("Getpid", os.Getpid())

    f, err := os.OpenFile("log.log", os.O_WRONLY|os.O_CREATE, 0777)
    defer f.Close()
    if err != nil {
        panic(err)
    }

    go func() {
        oldName := "log.log"
        for i := 0; i < 10; i++ {
            newName := oldName + "." + strconv.Itoa(i)

            _ = os.Rename(oldName, newName)
            oldName = newName
            time.Sleep(time.Second * 5)
        }
    }()

    for i := 0; i < 100; i++ {
        _, err = f.Write([]byte(strconv.Itoa(i) + "."))
        time.Sleep(time.Second)
    }
}

起一个 goroutine 五秒修改一下文件名,主 goroutine 不停的往文件中写入,不会因为文件名变化造成写入失败。

有个项目中使用 seelog 写日志,貌似有点问题,偶尔不能自动切换文件,导致日志都写入到相同的文件中。


不仅如此,在后续修改文件权限的情况下,也不影响,进程正在对打开的文件描述符进行写入操作,所以为了安全考虑应该在执行 exec 系统调用之前,将无关的文件描述符都关闭。

相关文章

  • 第三章 文件I/O

    文件描述符 所有打开的文件都通过文件描述符引用。操作(读写)该文件描述符就相当于操作该文件。文件描述符是一个非负的...

  • 第三章 文件IO

    对于内核而言,所有打开的文件都通过文件描述符引用,文件描述符是一个非负整数文件描述符标准符号常量文件描述符0标准输...

  • ios进阶路线 shell脚本语言基础教程(四)

    上篇我们讲了文件描述符还有自定义文件描述符,补充一下如何关闭自定义的文件描述符 语法:exec 描述符>&- 案例...

  • Linux中文件描述符,重定向与标准输入输出

    Linux中文件描述符,重定向与标准输入输出 文件描述符:内核(kernel)利用文件描述符(file descr...

  • 文件I/O和记录锁

    文件描述符: 文件描述符是一个非负整数,所有打开的文件都通过文件描述符引用。按照惯例:0(STDIN_FILENO...

  • 认识安卓的文件描述符FileDescriptor

    理解文件描述符 文件描述符(FileDescriptor) 这是Unix/Linux系统文件操作的相关概念,And...

  • ulimit ps dmesg which stat 命令小结

    ulimit 设置查看文件描述符命令 ulimit -n查看文件描述符 ulimit -SHn 65535设置文件...

  • 文件描述符

    内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件...

  • Shell--呈现数据

    文件描述符 用stdout和stderr文件描述符来在多个位置生成输出,重定向相应的文件描述符 临时重定向 在脚本...

  • Linux I\O总结 -- 基础概念篇

    文件描述符 0, 1, 2 文件描述符(fd) 0 is standard in (stdin),1 is sta...

网友评论

      本文标题:文件描述符

      本文链接:https://www.haomeiwen.com/subject/kfedrrtx.html