golang bad file descriptor问题的解决方法
作者:benben_2015 发布时间:2024-05-09 09:31:42
标签:bad,file,descriptor
发现问题
在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
0
投稿
猜你喜欢
- 因此,在数据库的日常维护工作中,如果只是一次两次碰到ORA-01555错误,一般都先忽略,但是如果经常碰到该错误,则要进行一些调整以避免该错
- Macromedia StandardMacromedia Dreamweaver MXMenu Commandsphotoshop快捷键大
- 1、引言小 * 丝:鱼哥,你说这就快到圣诞节了,我应该送女神什么礼物呢?小鱼:你的女神又不缺什么礼物,倒不如送点惊喜?小 * 丝:送什么惊喜呢?小鱼
- select CONVERT(varchar, getdate(), 120 ) 200
- Tornado是一个python的开源web框架,它比django要轻量级到多,也没有什么组件,只有运用到对应到业务场景下我才使用这个框架,
- 本文针对开发项目中遇到的问题,进行了汇总问题1:如何选择select的option里面的值? 首先会用到一个方法 onchange();这个
- 我试了网上提供的一些方法都不行,最后还是自己用SQL解决了些问题。 1 在查询分析器里面选中出问题的数据库,然后输入: Exec sp_co
- 看代码吧~# 加载库import pandas as pd# 데이터프레임을 만듭니다.dataframe = pd.DataFrame()
- 本文实例讲述了让thinkphp支持大小写url地址访问的方法。分享给大家供大家参考。具体实现方法如下:通常ThinkPHP默认是区别大小写
- 假设你想设计一个模块集(也就是一个“包”)来统一处理声音文件和声音数据。通常由它们的扩展有不同的声音格式,例如:WAV,AIFF,AU),所
- 1.查询当前数据库所有表SELECT O.object_id AS TableId, &nb
- 目录元组简单介绍声明元组元组与列表的区别特殊的元组元组的简写元组常见运算操作索引 [ ] 取值切片 [ : : ] 取值运算符 +运算符 *
- 先来说eval的用法,内容比较简单,熟悉的可以跳过。eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执
- * 对子查询和Join进行了优化,包括对MyISAD和InnoB存储引擎分散范围内的批量索引访问。* 增加了 BACKUP DATABASE
- 写在前面机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后
- 用6N±1法求素数 任何一个自然数,总可以表示成为如下的形式之一: 6N,6N+1,6N+2,6N+3,6N+4,6N+5 (N=0,1,2
- 本文为大家分享了mysql5.7.17安装配置方法,供大家参考,具体内容如下1、下载 MySQL 数据库的安装包:mysql-5.7.17.
- 大家都知道对于一个页面来说,最基本的结构呢就是<html> <head> <!-- 头部信息内容区域
- 在调用后端接口时,由于后端接口的不规范统一,接口最外层在没有数据时返回的是空数组(其实更想要的是空json对象),而在有数据时返回的是jso
- 一、基础环境准备windows环境:Pycharmpython3.6Django2.0.1Mysql5.7安装django 在pycharm