Tag: 文件系统

虚拟文件的文件大小

我正在使用FUSE创建一个覆盖文件系统,其中目录使用虚拟实体进行扩充。 我将这些实体的文件大小设置为0,因为我无法知道 – 在阅读它们之前,这在我的情况下特别昂贵 – 应该是什么。 但是,似乎有一个明显的优化发生,因为零长度文件不会产生任何read调用(仅open和release )。 因此,我的问题很简单,我应该将文件大小设置为什么? 我知道符号链接的文件名大小; 如果它不是符号链接,这会工作吗? 否则,我能做的最好的事情就是为大小提供一个下限…如果read有一个文件描述符,块大小和偏移量,可能它会读取’直到EOF而不是任何stat可以告诉它。

递归函数+链表。 sprintf没有将变量保存到struct变量中。

以下代码允许我以递归方式读取目录,并使用链接列表在struct变量中打印所有文件及其路径。 当我打印出正确显示它的完整路径时,我遇到的问题是在函数内,但是当我通过链接列表读取时,完整路径显示为null。 我哪里错了? 代码: #include #include #include #include const char *path_format = “%s/%s”; typedef struct search search; struct search { char *path; char *fileName; char *fullPathToFile; search *next; }; // Modified to take a node ptr. This should be the last node in the list // Returns a node ptr. This is the new last […]

我们转换Descriptor + Descriptor-> SerialNumberOffset时序列号枚举失败

我有一个内核驱动程序,用于查找存储设备的序列号,但驱动程序存在问题。 Descriptor->SerialNumberOffset是103但是(LPCSTR)(UINT_PTR)Descriptor+(DWORD32)Descriptor->SerialNumberOffset为NULL 这是我的代码 NTSTATUS GetDeviceTypeAndUniqueID(IN PDEVICE_OBJECT StorageStackDeviceObject, cwDevices *lDeviceTypeArg, char *pszUidArg) { DWORRD lDeviceType=0; STORAGE_PROPERTY_QUERY Query; STORAGE_DEVICE_DESCRIPTOR Buffer[4]; NTSTATUS Status = STATUS_SUCCESS; ULONG uBusType=BusTypeUnknown; PSTORAGE_DEVICE_DESCRIPTOR Descriptor=NULL; PIRP NewIrp2=NULL; PIO_STACK_LOCATION NextIrpStack=NULL; IO_STATUS_BLOCK IoStatus; char szSptr[2]={‘_’,’\0′}; Query.PropertyId = StorageDeviceProperty;// first set the query properties Query.QueryType = PropertyStandardQuery; lDeviceType=0; if (KeGetCurrentIrql() > PASSIVE_LEVEL) { return STATUS_SUCCESS; } if(StorageStackDeviceObject […]

检测不存在的文件

所以这是我用过的第一个程序之一,我自己创建了一些自我创建的错误检查,但是出于某种原因,当我编译它并运行它时: ./file test1.txt test2.txt 10 我得到一个错误,表明输出文件存在,我检查了文件,即使我更改输出文件的名称(第二个参数),我也没有得到任何结果。 有谁可以提供帮助? 我现在多年来一直在绞尽脑汁。 这是我在Gentoo中编译和运行的UNIX作业。 我让它在VB中运行,并在我的Windows和Linux操作系统之间有一个链接文件夹。 #include #include #include #include #include #include #define BUFFT 25 int main (int argc, char *argv[]) { int count; int readin; int writeout; printf (“This program was called \”%s\”.\n”,argv[0]); if (argc > 1) { for (count = 1; count < argc; count++) { printf("argv[%d] = %s\n", […]

在可执行文件中嵌入文件系统?

我只是好奇:如果我想在可执行文件中嵌入一个文件系统,我假设我只是使用objcopy嵌入了一个文件系统的图像。 但是,我应该使用哪种文件系统? 是否会有一个简单的库来直接访问文件系统映像? 我对此没有任何用处,所以像“不要这样做,使用实际文件”这样的回答是无关紧要的。

如何保证在运行时解密的文件被清除?

使用C或C ++,在将文件解密到磁盘后 – 如果应用程序崩溃或系统关闭且无法正常清理,我怎么能保证它被删除? 在Windows和Linux上使用C或C ++?

可执行启动目录的绝对路径

我试图弄清楚如何获取我的程序的开始目录。 我正在使用C并可以访问GLib。 在Linux方面,只要程序启动就很容易g_get_current_directory,并存储该值以供以后使用。 我尝试在Windows上使用相同的方法,但g_get_current_directory返回%APPDATA%解析的内容。 关于如何使用C获取起始目录的任何想法? 谢谢,

模拟文件系统访问

我正在设计用户空间中的文件系统,需要对其进行测试。 我不想使用可用的基准测试工具,因为我的要求不同。 因此,为了测试文件系统,我希望模拟文件访问操作。 为此,我首先使用ftw()函数遍历现有文件系统(实验)并列出文件中的所有文件和目录。 然后我调用一个模拟器来模拟许多进程的文件访问。 因此,模拟器随机启动一个过程,即它分叉一个执行真正过程所做的事情的线程。 线程随机选择文件操作(读,写,重命名等)从列表中选择此操作的参数(由ftw()生成)。 该线程执行许多此类文件操作,然后退出标记进程的结束。 模拟器继续产生线程; 线程执行可以像实际进程那样重叠。 现在,由于操作由线程执行,文件将被插入,删除,重命名,并在文件列表中更新。 我还没有开始编码。 这个计划看起来很健全吗? 我也不确定如何编码模拟器…它将如何在一段时间内产生线程。 我应该使用一些随机延迟来做到这一点。 谢谢

c语言中数据类型BYTE,WORD和DWORD的格式说明符?

在C语言中,对于与printf和scanf函数一起使用的数据类型BYTE,WORD和DWORD,最合适的格式说明符是什么? 我很难在控制台上显示BPB字段的值。 例如,如果我尝试使用“%lu”显示BPB_BytsPerSec,我会得到不同寻常的数据。 printf(“Bytes per Sector: %lu”, b->BPB_BytsPerSec); 我得到一个“514”的值,我相信,这是错误的解释..请建议出路。 谢谢。 (我通过MinGW使用gcc 5.1,通过64位Windows) 这是我们正在讨论的结构: /* BPB Structure Collected from internet */ struct BPB_FAT32 { BYTE BS_jmpBoot[3]; // 0 BYTE BS_OEMName[8]; // 3 WORD BPB_BytsPerSec; // 11 BYTE BPB_SecPerClus; // 13 WORD BPB_ResvdSecCnt; // 14 BYTE BPB_NumFATs; // 16 WORD BPB_RootEntCnt; // 17 WORD BPB_TotSec16; // 19 […]

玩具OS文件系统

我在assembly / c中开发了一个运行基本终端的基本内核。 我把它设置为用grub运行iso。 我想继续这个操作系统,但没有文件系统,我觉得好像没有别的我能做的。 经过很长一段时间在互联网上,我已经想出了实现这一点我真的无能为力。 人们已经说过实现FAT或制作VFS,但没有任何进一步的,也没有教程,也没有任何参考。 有人可以解释文件系统如何工作,我可以在哪里开始/我可以连接预制系统,以及如何使用它? 另外,在编译我的操作系统时,我无法访问标准库。 我使用gcc,nasm,ld和grub-mkrescue(用于磁盘映像)。 我使用qemu进行模拟。 编辑减少OT 有人可以详细描述文件系统的工作原理,所以当我查看已经实现的文件系统的来源(如FAT)时,我能理解如何将它应用到我自己的操作系统中吗? 编辑 – 更简单 更容易。 我怎么能直接访问硬盘? 我的内核完全在保护模式下运行,因此我可以切换并直接写入硬盘驱动器。 可以使用如下文件实现文件系统: name 特殊字符 文本 特殊字符 即: hello world.script 0x00 println“Hello,world !!” 为0x00 在您不需要特殊分段的地方,您只需查看文件名和特殊字符(不是像’\ 0’这样的字符串中),然后读取,直到找到第二个非字符串字符。 是否有办法通过切入和退出保护模式或写入硬盘驱动器来实现这一点?