0

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

man undelete

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

LIBRARY 标准 C 库 (libc, -lc)

概要 #包括

 int
 undelete(const char *path);

描述

undelete()系统调用尝试恢复以路径命名的已删除文件。目前,这仅在命名对象是联合文件系统中的空白时才有效。系统调用删除了白化,导致联合堆栈较低层中的任何对象再次变得可见。

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

返回值

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

所以程序很简单:

当前目录 (pwd) 是 /Users/Leo/Desktop/,我使用的是带有 HFS+ 文件系统的 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);
}

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

任何的想法?谢谢

4

2 回答 2

1

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

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

    如果(取消删除(路径))
        错误(路径);
    返回0;
}

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

于 2011-11-04T18:27:53.880 回答
1

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

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

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

这将首先将一个值(指向您的字符串的指针)分配给 a char,一个单字节值。编译器甚至通过警告警告:初始化从指针生成整数而不进行强制转换。在我的情况下,a然后有值D/0x44,但它可能是任何东西。然后,您将指向该单个字节的指针存储在pa. 你想要的是:

const char* pa="/Users/Leo/Desktop/test/a.out";
于 2011-11-04T18:50:48.090 回答