查看lstat(2)手册页,您会得到一些启发,以防可能因除ENOENT(文件不存在)之外的错误而失败。
最明显的是:
EACCES
搜索权限被拒绝对路径前缀的目录之一的路径。
因此,您需要一个无法搜索的目录。
是的,您可以查找系统中已经/var/lib/private
存在的一个(也许它已经存在?),但是您也可以自己创建一个,等效于:
$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile
lstat(2)操作将在此处以EACCES失败。(从目录中删除所有权限可确保这样做。也许您甚至不需要那么多,而chmod -x
删除执行权限就足够了,因为访问目录下的文件需要目录的执行权限。)
看看lstat(2)的手册页,还有另一种创造性的方法:
ENOTDIR
路径前缀的组成部分路径不是目录。
因此,尝试访问诸如之类的文件/etc/passwd/nonexistent
将触发此错误,此错误又与ENOENT(“无此类文件或目录”)不同,并且可能满足您的需求。
另一个是:
ENAMETOOLONG
路径太长。
但是您可能需要为此输入一个非常长的名称(我相信4,096字节是典型的限制,但是您的系统/文件系统可能有一个更长的名称。)
最后,很难说出其中任何一项对您实际上是否有用。您说您想要某种不会触发“文件不存在”方案的方案。尽管通常意味着ENOENT错误,但实际上,许多更高级别的检查将把lstat(2)中的任何错误简单地解释为“不存在”。例如,test -e
或者[ -e ...]
来自shell 的等效内容可能只是将以上所有内容解释为“不存在”,尤其是因为它没有返回不同错误消息的好方法,并且不返回错误意味着文件已经存在,绝对不是这样。
/etc/shadow