linux c 打开文件 errno 13

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux c 打开文件 errno 13相关的知识,希望对你有一定的参考价值。

我做了两个定时任务,一个负责写文件一个负责读文件,这两个进程通过信号量来实现互斥访问,两个定时都是10秒的,可是在过了10多分钟后,那个写文件的进程出错了就在fopen(filename,"w+")那里,打印出errno来是13,查了下是Permission denied ,而那个文件权限是777啊,再说在出错前都执行过几十次了,都没问题怎么突然就不行了呢,而那个读文件的没事还在继续运行,这是怎么回事呢,太头疼了,急需答案,那位高人帮小弟一把,不胜感激。

参考技术A 应该是机制的问题,你尝试一下PV

[Errno -101] NetCDF:打开 netcdf 文件时出现 HDF 错误

【中文标题】\[Errno -101\] NetCDF:打开 netcdf 文件时出现 HDF 错误【英文标题】:\[Errno -101\] NetCDF: HDF error when opening netcdf file 【发布时间】:2018-08-25 08:30:36 【问题描述】:

打开我的 netcdf 文件时出现此错误。 该代码以前可以工作。 我该如何解决这个问题?

Traceback(最近一次调用最后一次):

文件“”,第 1 行,在 ...

gather_vgt 中的文件“file.py”,第 71 行 返回 xr.open_dataset(文件名)

文件“/.../lib/python3.6/site-packages/xarray/backends/api.py”,行 286,在 open_dataset 中 自动关闭=自动关闭)

文件 "/.../lib/python3.6/site-packages/xarray/backends/netCDF4_.py", 第 275 行,开放 ds = opener()

文件 "/.../lib/python3.6/site-packages/xarray/backends/netCDF4_.py", 第 199 行,在 _open_netcdf4_group ds = nc4.Dataset(filename, mode=mode, **kwargs)

文件“netCDF4/_netCDF4.pyx”,第 2015 行,在 netCDF4._netCDF4.Dataset.init

文件“netCDF4/_netCDF4.pyx”,第 1636 行,在 netCDF4._netCDF4._ensure_nc_success

OSError: [Errno -101] NetCDF: HDF 错误: b'file.nc'

当我尝试使用 h5py 打开同一个 netcdf 文件时,我收到此错误:

OSError: 无法打开文件(此文件已禁用文件锁定 系统(使用 HDF5_USE_FILE_LOCKING 环境变量覆盖), errno = 38,错误消息 = '...')

【问题讨论】:

【参考方案1】:

你一定是这种情况:

您的 HDF5 库已更新 (1.10.1)(netcdf 在后台使用 HDF5)

您的文件系统不支持 HDF5 库使用的文件锁定。

为了读取你的 hdf5 或 netcdf 文件,你需要设置这个environment variable:

 HDF5_USE_FILE_LOCKING=FALSE

供参考,这是在HDF5 version 1.10.1中引入的,

添加了禁用 SWMR 文件锁定方案的机制。

HDF5 1.10.0(包括patch1)中使用的文件锁定调用 当底层文件系统不支持文件时会失败 锁定或锁定已被禁用的地方。禁用所有文件 锁定操作,一个名为的环境变量 HDF5_USE_FILE_LOCKING 可以设置为五个字符的字符串 '错误的'。这不会从根本上改变 HDF5 库 操作(除了初始文件打开/创建,SWMR 是无锁的), 但用户在打开文件时必须更加小心 避免有问题的访问模式(即:多个写入者)>文件锁定旨在防止。

另外,文件锁定时发出的错误消息 操作将 errno 设置为 ENOSYS(文件锁定时的典型情况 已禁用)已更新以描述问题和潜在问题 分辨率更好。

(DER,2016/10/26,HDFFV-9918)

【讨论】:

非常感谢!救我的命。就我而言,我需要导出 HDF5_USE_FILE_LOCKING=FALSE 因为我在 Jupyter 笔记本中打开了 netcdf 文件。在我使用 Jupyter notebook 之前需要导出到环境中。我也在.bashrc中添加了这个命令,所以它会自动执行它。【参考方案2】:

就我而言,@Florian 建议的解决方案不起作用。我找到了另一个解决方案,它表明h5pynetCDF4 的导入顺序很重要(参见here)。

事实上,以下内容对我有用:

from netCDF4 import Dataset
import h5py

切换顺序会导致 OP 描述的错误。

【讨论】:

以上是关于linux c 打开文件 errno 13的主要内容,如果未能解决你的问题,请参考以下文章

如何修复错误无法打开文件,路径 = '/storage/emulated/0/DCIM/Camera/20200818_123041.jpg'(操作系统错误:权限被拒绝,errno = 13)

PermissionError Errno 13 in python

C++ 管道,打开的文件太多,Errno 25

如何解决打开文件时出现IOError[errno 17]文件?

线程已经通过之前的创建文件指令,将文件创建并打开,但是在进行写数据提示errno9 Bad File Descriptor

OSError : [Errno 24] 打开的文件太多