问题描述:自己做了一个文件系统,在一定情况下文件读取会报错,尝试了很多错误值,但是windows总报权限错误
1.确定文件系统返回值:利用strace查看调用过程
首先通过smbstatus查找到链接samba的进程号


通过strace的输出可以看到文件系统的返回值为EBUSY

2.windows samba收到的错误码:利用Wireshark跟踪到windows侧收到的错误码为NT_STATUS_ACCESS_DENIED

3.samba 源码调查:通过上面两步确定到linux文件系统的返回值跟windows侧收到的错误码不一样。然后在samba的源码中查找了一下,发现有一个错误码的对照表Errmap_unix.c。
总结:linux fs的错误码与windows收到的错误码部分对照表
Linux fs | windows |
---|---|
EAGAIN | NT_STATUS_NETWORK_BUSY |
EINTR | NT_STATUS_RETRY |
EPERM | NT_STATUS_ACCESS_DENIED |
EIO | NT_STATUS_IO_DEVICE_ERROR |
EEXIST | NT_STATUS_OBJECT_NAME_COLLISION |
网友评论