golang bad file descriptor问题的解决方法

作者:benben_2015 时间:2024-05-09 09:31:42 

发现问题

在golang中,对文件进行写操作时出现上面的错误。首先复现下这个问题。


package main

import (
"os"
"fmt"
)

func main() {
file, err := os.Open("a.txt")
if err != nil {
 fmt.Println(err)
}
defer file.Close()

content:=[]byte("Go is an open source programing language that makes it easy to build simple,reliable,and efficient software")
_, err = file.Write(content)
if err != nil {
 fmt.Println(err)
}
}

此时运行就会出现错误write a.txt: bad file descriptor。这是什么原因呢?其实这和os.Open()函数有关,下面了解下Open()函数。


func Open(name string) (*File,error) {
return OpenFile(name, O_RDONLY, 0)
}

可以看出来,Open函数打开文件的默认方式是只读,所以当你要对打开的文件进行写操作时,是不被允许的。OpenFile函数的第二个传入参数的值可以是:

参数名 含义
O_RDONLY 打开只读文件
O_WRONLY 打开只写文件
O_RDWR 打开既可以读取又可以写入文件
O_APPEND 写入文件时将数据追加到文件尾部
O_CREATE 如果文件不存在,则创建一个新的文件
O_EXCL 文件必须不存在,然后会创建一个新的文件
O_SYNC 打开同步I/0
O_TRUNC 文件打开时可以截断 

解决方法

现在知道原因,解决方法只要改变文件读取的方式就行。如下例:


package main

import (
"os"
"fmt"
)

func main() {
file, err := os.OpenFile("a.txt", os.O_APPEND|os.O_WRONLY, os.ModeAppend)
if err != nil {
 fmt.Println(err)
}
defer file.Close()

content:=[]byte("Go is an open source programing language that makes it easy to build simple,reliable,and efficient software")
_, err = file.Write(content)
if err != nil {
 fmt.Println(err)
}
}

来源:https://blog.csdn.net/benben_2015/article/details/80607425

标签:bad,file,descriptor
0
投稿

猜你喜欢

  • 教你轻松了解MySQL数据库中的结果字符串

    2009-02-23 17:29:00
  • python MultipartEncoder传输zip文件实例

    2022-04-20 07:22:57
  • jupyter notebook 添加kernel permission denied的操作

    2021-07-06 19:49:14
  • 微信 java 实现js-sdk 图片上传下载完整流程

    2024-04-29 14:08:03
  • 浅谈function(函数)中的动态参数

    2023-08-11 10:23:59
  • python中ASCII码和字符的转换方法

    2021-04-06 13:22:04
  • python实现支付宝当面付(扫码支付)功能

    2023-04-01 21:38:45
  • python基础之模块的导入

    2023-10-24 05:44:11
  • Pytest+Yaml+Excel 接口自动化测试框架的实现示例

    2023-01-07 05:48:17
  • MySQL无法创建外键的原因及解决方法

    2024-01-17 00:00:07
  • 基于laravel缓冲cache的用法详解

    2024-05-11 10:07:55
  • python简单利用字典破解zip文件口令

    2023-06-27 05:36:31
  • python pymysql链接数据库查询结果转为Dataframe实例

    2024-01-16 22:07:29
  • Python数字图像处理基础直方图详解

    2021-02-12 08:21:55
  • numpy中np.dstack()、np.hstack()、np.vstack()用法

    2021-08-27 11:47:42
  • django 做 migrate 时 表已存在的处理方法

    2022-02-14 16:11:53
  • Django查询数据库的性能优化示例代码

    2024-01-22 22:18:48
  • Python判断某个用户对某个文件的权限

    2023-12-15 01:25:27
  • 用C#对ADO.NET数据库完成简单操作的方法

    2024-01-15 09:12:58
  • Django实现自定义404,500页面教程

    2021-06-20 06:23:07
  • asp之家 网络编程 m.aspxhome.com