filesystems 相关问题

文件系统是在计算机系统上组织数据的一种方式。通常,文件系统由文件,文件夹(通常是特殊类型的文件)和可用于与文件交互的API组成。

Ubuntu 陷入紧急模式

我正在使用 Oracle 的 VirtualBox 7.0.16,目前存在...问题: 注意:请暂时不要升级到 7.0.16。此版本存在一个问题,当虚拟机运行时,可能会导致主机操作系统崩溃

回答 1 投票 0

如何在 Windows (NTFS) 上预分配文件而不写入整个文件

我有一个应用程序需要为磁盘上可能非常大的文件(几TB)预先分配空间。该文件应占用磁盘上的空间,以便分配的空间不能被其他东西使用。 使用...

回答 1 投票 0

linux-kernel 中进程的当前目录

是否可以通过struct task_struct获取进程当前目录?我可以看到 struct fs_struct 有 pwd 指针,但我无法获取存储此信息的确切变量。 还有...

回答 2 投票 0

std::ofstream 打开成功,但是当我调用 write 时出现错误“没有这样的文件或目录”

我有这样的cpp代码: std::ofstream fs; fs.open("a.txt", ios::out | ios::binary | ios::app); 如果(fs) { if(!fs.write(缓冲区, buffer_size)) { std::cout << strerror...

回答 2 投票 0

如何在 kotlin/java 中比较两个路径的文件系统?

我想知道如何检查两个不同路径的文件系统是否相等。写类似的东西似乎是错误的 路径1.文件系统==路径2.文件系统 因为可能存在归档时的情况

回答 1 投票 0

Docker安装问题:无法挂载overlay:没有这样的设备storage-driver=overlay2

我正在尝试在 Ubuntu 20.04.3 LTS 上安装 docker。我从 *.deb 包安装。安装docker的时候,出现如下错误。 无法安装覆盖:没有此类设备存储驱动...

回答 1 投票 0

如果从 python 调用 mount 命令,文件系统将安装为只读

我有自定义的Python软件,它监视udev,如果插入了USB磁盘,它会通过调用os.system(f'mount {device.device_node} /some/path/usb')来安装它。问题是,那个U盘挂载了...

回答 2 投票 0

自定义 ls 实现中未对目录条目进行排序

我一直在尝试使用 C 中的系统调用来实现“ls”命令,但我遇到了一个小问题。无论我如何尝试,我似乎都无法对目录条目进行排序。 #包括 我一直在尝试使用 C 中的系统调用来实现“ls”命令,但我遇到了一个小问题。无论我如何尝试,我似乎都无法对目录条目进行排序。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include <time.h> #include <sys/stat.h> #include <pwd.h> #include <stdbool.h> #include <unistd.h> #include <fcntl.h> #include <dirent.h> #include <limits.h> #define BUFF_MAX 1024 char* octal_to_str(int permissions){ char octal_str[4]; sprintf(octal_str, "%o", permissions); char perm_str[10] = {0}; for (int i = 0; i < 3; i++){ switch (octal_str[i]) { case '0': strcat(perm_str, "---"); break; case '1': strcat(perm_str, "--x"); break; case '2': strcat(perm_str, "-w-"); break; case '3': strcat(perm_str, "-wx"); break; case '4': strcat(perm_str, "r--"); break; case '5': strcat(perm_str, "r-x"); break; case '6': strcat(perm_str, "rw-"); break; case '7': strcat(perm_str, "rwx"); break; default: break; } } return strdup(perm_str); } char* add_dir_to_perms(bool is_dir,char* perms){ char final[11] = {0}; is_dir ? strcat(final, "d") : strcat(final, "-"); return strdup(strcat(final, perms)); } void list_verbose(const char *dirname, struct dirent* entry){ char path[BUFF_MAX]; snprintf(path, sizeof(path), "%s/%s", dirname, entry->d_name); struct stat file_stat; if(stat(path, &file_stat) == -1){ perror("Error getting file status"); return; } char* last_modified = ctime(&file_stat.st_mtime); last_modified[strlen(last_modified) - 1] = '\0'; printf("%s %ld %s %s %ld %s %s\n", add_dir_to_perms(S_ISDIR(file_stat.st_mode),octal_to_str(file_stat.st_mode & 0777)), file_stat.st_nlink, getpwuid(file_stat.st_uid)->pw_name, getpwuid(file_stat.st_gid)->pw_name, file_stat.st_size, last_modified, entry->d_name ); } void list(struct dirent* entry){ printf("%s ", entry->d_name); } int entry_cmp(const void* a, const void* b){ struct dirent* entry_a = (struct dirent*) a; struct dirent* entry_b = (struct dirent*) b; return strcasecmp(entry_a->d_name, entry_b->d_name); } void ls(const char* dirname, bool recurse, bool verbose){ char path[BUFF_MAX]; DIR* dir = opendir(dirname); char* subdir_names[BUFF_MAX]; unsigned subdir_num = 0; if(dir == NULL) { perror("Error opening directory"); exit(EXIT_FAILURE); } struct dirent* entry; struct dirent* entries[BUFF_MAX]; unsigned entry_count = 0; struct stat file_stat; if(recurse) printf("%s:\n", dirname); while((entry = readdir(dir)) != NULL){ if(entry->d_name[0] == '.') continue; entries[entry_count++] = entry; } qsort(entries, entry_count, sizeof(struct dirent*), &entry_cmp); for(unsigned i = 0; i < entry_count; i++){ entry = entries[i]; if(verbose) list_verbose(dirname, entry); else list(entry); snprintf(path, sizeof(path), "%s/%s", dirname, entry->d_name); if(stat(path, &file_stat) == -1){ perror("Error getting file status"); return; } if(S_ISDIR(file_stat.st_mode)) subdir_names[subdir_num++] = strdup(path); } printf("\n\n"); for(unsigned i = 0; recurse && i < subdir_num; i++) { ls(subdir_names[i], recurse, verbose); free(subdir_names[i]); } closedir(dir); } int main(int argc, char* argv[]){ bool VERBOSE = false; bool RECURSIVE = false; if(argc < 1|| argc > 3){ fprintf(stderr, "Usage: %s [-lR] <directory>\n", argv[0]); exit(EXIT_FAILURE); } int opt; while ((opt = getopt(argc, argv, "lR")) != -1) { switch (opt) { case 'l': VERBOSE = true; break; case 'R': RECURSIVE = true; break; default: fprintf(stderr, "Usage: %s [-lR] <directory>\n", argv[0]); exit(EXIT_FAILURE); } } char* dirname; char buff[1024]; if (optind < argc) dirname = argv[optind]; else if ((argc == 3 && RECURSIVE && VERBOSE) ||(argc == 2 && RECURSIVE) || (argc == 2 && VERBOSE) || (argc == 1)){ dirname = getcwd(buff, sizeof(buff)); }else { fprintf(stderr, "No directory specified\n"); exit(EXIT_FAILURE); } struct stat path_stat; if (stat(dirname, &path_stat) == -1) { perror("Error accessing directory"); exit(EXIT_FAILURE); } if (!S_ISDIR(path_stat.st_mode)) { fprintf(stderr, "%s is not a directory\n", dirname); exit(EXIT_FAILURE); } ls(dirname, RECURSIVE, VERBOSE); return 0; } 我尝试使用 gdb 来分析幕后发生的事情,但它似乎让我对目录条目名称感到困惑。 entry_cmp (a=0x7fffffffb160, b=0x7fffffffb168) at Ex-2/myls.c:89 89 struct dirent* entry_a = (struct dirent*) a; (gdb) step 90 struct dirent* entry_b = (struct dirent*) b; (gdb) step 91 return strcasecmp(entry_a->d_name, entry_b->d_name); (gdb) p entry_a->d_name $3 = "UUU\000\000\250\223UUUU\000\000\300\223UUUU\000\000ؓUUUU\000\000\360\223UUUU\000\000\b\224UUUU\000\000 \224UUUU\000\000\070\224UUUU\000\000P\224UUUU", '\000' <repeats 188 times> (gdb) p entry_b->d_name $4 = "UUU\000\000\300\223UUUU\000\000ؓUUUU\000\000\360\223UUUU\000\000\b\224UUUU\000\000 \224UUUU\000\000\070\224UUUU\000\000P\224UUUU", '\000' <repeats 196 times> 排序不进行的原因是什么? 从返回指针上的readdir手册页: 成功后,readdir()返回指向dirent结构的指针。 (此结构可能是静态分配的;请勿尝试对其进行free(3)。) 这里重要的一点是关于“静态分配”的。这意味着 readdir 函数可能只有一个 dirent 结构,并且它不断返回指向同一对象的指针。通过打印所有指针的值,可以在调试器中轻松检查这一点。 这意味着您需要复制结构体,而不是指针。 解决方案是将entries更改为结构体对象数组,而不是指针,然后复制返回的结构体: // ... struct dirent entries[BUFF_MAX]; // Array of objects, not pointers // ... entries[entry_count++] = *entry; // Copy the object, not the pointer // ...

回答 1 投票 0

在 Node.js 中创建一个空文件?

目前我使用 fs.openSync(文件路径, 'a') 但这有点棘手。是否有一种“标准”方法可以在 Node.js 中创建空文件?

回答 4 投票 0

c++ 如何从路径字符串中删除文件名

我有 const char *pathname = "..\somepath\somemorepath\somefile.ext"; 如何将其转化为 “..\somepath\somemorepath” ?

回答 6 投票 0

Raspberry Pi Pico:使用 Pico-SDK 从 BOOTSEL 区域读取文件

我正在使用 Raspberry Pico W,它必须充当 MQTT 客户端,并且我正在针对 C / C++ API 的 Pico-SDK 对其进行编程。 由于我要将代码用于多个 Raspberry Pico W,所以我...

回答 1 投票 0

使用 r 进行文件夹管理:检查目录是否存在,如果不存在则创建它

我经常发现自己编写的 R 脚本会生成大量输出。我发现将此输出放入其自己的目录中更干净。我在下面写的内容将检查是否存在直接...

回答 11 投票 0

FAT 文件系统上的第一个数据扇区到底在哪里?

我不太明白FAT格式磁盘上的第一个数据扇区应该在哪里(尤其是FAT-12和FAT-16)。我已经阅读了 FAT 系统的 Microsoft 文档,其中...

回答 1 投票 0

加快远程目录搜索速度

我有一些旧代码是为支持本地网络上的工作而编写的,但现在可能由远程工作人员运行。本地网络上相当快的单个文件系统访问是

回答 1 投票 0

如何跨平台存储UTF-8文本文件的元数据?

我正在寻找一种跨平台方法来存储 UTF-8 文本文件的少量元数据。例如当前选择和光标位置。我了解像我们这样的特定于文件系统的解决方案...

回答 1 投票 0

清空目录的最佳方法是什么?

有没有办法删除指定目录的所有文件和子目录而不迭代它们? 非优雅的解决方案: 公共静态无效空目录(字符串路径) { 如果(

回答 5 投票 0

如何在 Swift 中将字符串附加到 URL?

给定一个文件名,如下所示: 让文件名=“example.jpg” 我使用辅助函数获取此目录的 URL,该函数将 URL 返回给我: 让 imagesURL = getURL() 怎么...

回答 3 投票 0

如何拒绝用户通过真实路径访问MacFuse文件系统

我基于示例项目LoopbackFS开发了一个简单的MacFuse文件系统,然后我将fuse文件系统挂载到文件夹lookB,该文件夹位于路径/Users/eren/lookB下。 现在我们有两个...

回答 1 投票 0

整个 Inode 表是否加载到主内存中

我知道Inode表存储在硬盘上。 但是当我们打开系统时,整个表会被加载到主内存中还是只是其中的一部分。哪一部分?

回答 1 投票 0

在java中识别磁盘类型的文件系统格式,如ntfs、fat16/32或ext

java中有没有办法找出磁盘的文件系统格式? 例如,对于 Windows 硬盘驱动器,它可能是 NTFS,对于 zip 驱动器,它可能是 FAT32。

回答 3 投票 0

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.