- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为我的操作系统类(class)进行此练习:我应该通过命令行传递特定目录以查找其中由软链接(soft link)指向的任何文件。
这就是我所做的:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
int main(int argc, char *argv[])
{
DIR *dir_ptr;
struct dirent *dir_str;
struct stat buf;
struct stat buf2;
if(argc!=2)
{
printf("Error! I need a directory.\n");
exit(-1);
}
if((dir_ptr=opendir(argv[1]))==NULL)
{
printf("Opendir error: %s\n", strerror(errno));
exit(-1);
}
while((dir_str=readdir(dir_ptr))!=NULL)
{
lstat(dir_str->d_name, &buf);
if(S_ISLNK(buf.st_mode))
{
stat(dir_str->d_name, &buf2);
printf("'%s' points to a file of %ld bytes.\n", dir_str->d_name, buf2.st_size);
}
}
closedir(dir_ptr);
exit(0);
}
现在这是我的问题:这个程序只是将指向特定大小的文件的所有软链接(soft link)写入标准输出。相反,我需要它打印软链接(soft link)指向的所有文件。其次,奇怪的是,这个程序似乎只有在不需要目录的情况下才起作用,我的意思是,使用 getcwd() 获取当前目录并将返回的路径名传递给 opendir() 。事实上,这甚至不打印传递目录中的所有软链接(soft link)。
提前致谢!任何帮助将不胜感激。
编辑:让我们假设我们有一个名为“my_directory”的目录,其中包含这些文件:
justatext.txt
softlink1 (it points to justatext.txt)
justanothertext.txt
softlink2(it points to justanothertext)
当我通过命令行(./a.out my_directory)传递“my_directory”时,我希望程序写入标准输出“justatext.txt”和“justanothertext.txt”,因为目录中的这些文件由软链接(soft link)。如果我将此目录传递给我的程序,则不会打印任何输出。
最佳答案
好的,我想我已经解决了我的问题。总结评论中的所有建议,这就是我所做的并且似乎有效:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <limits.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
int main(int argc, char *argv[])
{
DIR *dir_ptr;
struct dirent *dir_str;
struct stat buf;
struct stat buf2;
char *buf3;
ssize_t nbyte, bufsize;
int flag=0;
if(argc!=2)
{
printf("Error! I need a directory.\n");
exit(EXIT_FAILURE);
}
if((dir_ptr=opendir(argv[1]))==NULL)
{
printf("Opendir error: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
chdir(argv[1]);
while((dir_str=readdir(dir_ptr))!=NULL)
{
lstat(dir_str->d_name, &buf);
bufsize=buf.st_size+1;
if(buf.st_size==0)
bufsize=PATH_MAX;
buf3=malloc(bufsize);
if(buf3==NULL)
{
perror("malloc");
exit(EXIT_FAILURE);
}
nbyte=readlink(dir_str->d_name, buf3, bufsize);
if(S_ISLNK(buf.st_mode))
{
stat(dir_str->d_name, &buf2);
printf("%s is a file of %ld bytes pointed by a symbolic link (%s).\n", buf3, buf2.st_size, dir_str->d_name);
flag+=1;
}
}
if(flag==0)
printf("No files pointed by a syslink found in this directory!\n");
free(buf3);
closedir(dir_ptr);
exit(0);
}
首先,我使用chdir()
来通过命令行传递当前目录来更改当前目录;然后我实现了 readlink() 来获取以其参数命名的符号链接(symbolic link)中的路径名。如果发生错误,我还使用 exit(EXIT_FAILURE)
来关闭程序。
我不知道这是否完全正确。如果不是这样,请告诉我!
关于c - 扫描目录以查找软链接(soft link)指向的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50816517/
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
最近我看到这篇文章,它对 Jenkins 进行 GC 调优,其中讨论了这个参数:-XX:SoftRefLRUPolicyMSPerMB https://jenkins.io/blog/2016/11/
我在跑 means2来自 scipy,虽然我收到一条错误消息: /usr/lib/python2.7/dist-packages/scipy/cluster/vq.py:600: UserWarnin
环境为ubuntu 16.04 64bit,go版本go1.12 linux/amd64 我正在尝试将我的 golang 项目从 gopath 切换到 gomodule。我项目导入的包之一是使用cgo
urplus(多余) wave(浪) Get lost (迷路) nature(本性) Rely on 依赖 Soft cancer (软癌) Devour.(吞噬) ink into
我正在尝试安装 openal-soft在 Ubuntu Focal 上,但没有运气。 这是我要安装的软件包: https://packages.ubuntu.com/source/focal/open
ln -s /dir1/file1 /dir2/file1 我想在目标 dir1 中创建一个与 dir2 中的源文件名相同的软链接(soft link) 如何在目标路径中不输入 file1 名称的
我目前正在研究调试器。我读到调试器有软件断点(apparently 这些是最常用的断点)。这些通过将操作码的第一个字节替换为 Int 3(操作码 0xcc)来工作。 我已经读过程序的文本(/code)
根据 keyword module 的文档,Python 3.9 中添加了两个新成员: issoftkeyword softkwlist 然而,他们的文档并未透露任何有关其目的的信息。在What's
我正在使用 OpenAL-Soft对于一个项目,现在我正在尝试决定是否需要实现 OpenAL 源池。 源池有些麻烦(我需要编写代码来“分配”源,以及以某种方式决定何时可以“释放”它们),但如果 Ope
当我说“软”事务时,我的意思是不涉及某些数据库中的持久性,而只是逻辑对象修改。故事是这样的。 普通的 JAVA 应用程序,没有框架,可能有很多线程。 对象Ob在其单独的线程中启动doSomething
我有几百个由不同工具生成的数据库,并存档在一个中心区域。所有文件都以压缩格式存储。我尝试通过在 var 目录中创建软链接(soft link)将这些数据库导入 mysql 服务器,但我在 mysql
在 Linux 中,我如何找到链接到特定目标目录或文件的所有软链接(soft link)? 最佳答案 您可以使用find 的-lname 参数: find . -lname linktarget 关于
创建了名为D1的目录,并在同一目录中创建了文件f1 创建了一个名为 D2 的空目录,为 d1(目录)中的 f1(文件)创建了软链接(soft link)并将其存储在 d2(目录)中。 我使用的命令:l
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我可以将软链接(soft link)存储在apache文档根目录(/var/www/html)下并将实际文件保留在文档根目录之外的另一个文件系统中吗?我的硬盘中有 4 个文件系统:3 个 NTFS 和
Linux 命令:我正在使用以下命令,该命令返回目录中的最新文件名。 ls -Art | tail -n 1 当我运行此命令时,它会返回最新更改的文件,这实际上是软链接(soft link),我想忽略
红帽 5.5gcc 版本 4.1.2 我有一个名为 lib 的目录,在该目录中我有我们在使用客户 API 时从客户那里获得的所有共享库(大约 30 个)。我们与此 API 链接。 目录结构: /usr
我有一个 WPF 应用程序使用 INotifyPropertyChanged 来指示属性更新。我喜欢它的一点是,它使您能够在不调用所有 setter 代码的情况下发出属性更改信号。当您有两个相互更新的
我在系统的三个不同路径中有相同的共享库。假设路径是 PATH1、PATH2 和 PATH3。 共享库名称是 libmylib.so 现在,如果我在 PATH1 中用损坏的软链接(soft link)替
我是一名优秀的程序员,十分优秀!