繁体   English   中英

使用C中的undelete()恢复已删除的文件

[英]Recover a deleted file using undelete() in C

我只是想在HFS +格式化的Volumn上恢复C中的文件。 根据

man undelete

NAME取消删除 - 尝试恢复已删除的文件

LIBRARY标准C库(libc,-lc)

大纲 #include

  int undelete(const char *path); 

描述

undelete()系统调用尝试恢复由path命名的已删除文件。 目前,仅当命名对象是联合文件系统中的白名单时,此方法才有效。 系统调用将删除whiteout,导致union堆栈下层中的任何对象再次可见。

最终, undelete()功能可以扩展到能够恢复已删除文件的其他文件系统,例如日志结构文件系统。

返回值

如果成功,则undelete()函数返回值0; 否则返回值-1,并设置全局变量errno以指示错误。

所以程序很简单:

当前目录(pwd)是/ Users / Leo / Desktop /我在使用HFS + Filesystem的Mac 10.7.2上。

#include <unistd.h>
int main()
{
    char a="/Users/Leo/Desktop/test/a.out";//I delete a.out using rm for testing
    const char* pa=&a;
    return undelete(pa);
}

但是当我运行程序时,我得到了返回255的shell。

任何想法? 谢谢

取消删除失败。 要找出原因,请检查错误。 例如:

#include <unistd.h>
int main( int argc, char **argv )
{
    char *path = argc > 1 ? argv[ 1 ] : "a.out";

    if( undelete(path))
        perror( path );
    return 0;
}

虽然看起来你的问题是你有一个char而不是char指针。 你应该得到一个编译器警告。

首先,您需要检查返回值并对其进行评估。 如果为-1,则打印错误消息,例如使用perror或格式化错误消息并使用strerror(errno)

但是在你尝试调用undelete之前你也遇到了一个重大错误:

char a="/Users/Leo/Desktop/test/a.out";
const char* pa=&a;

这将首先将值(指向您的字符串的指针)分配给char ,即单个字节值。 编译器甚至警告警告:初始化从指针生成整数而没有强制转换。 对我来说, a则有值D / 0×44,但它可能是任何东西。 然后,将指针存储在pa中的单个字节中。 你想要的是:

const char* pa="/Users/Leo/Desktop/test/a.out";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM