我只是想在HFS +格式化的Volumn上恢复C中的文件。根据
man undelete
命名 取消删除 - 尝试恢复已删除的文件
库 标准C库(libc,-lc)
概要 #include
int undelete(const char *path);
描述
undelete()
系统调用尝试恢复已命名的已删除文件 通过路径。目前,仅当命名对象是a时才有效 联合文件系统中的whiteout。系统调用将删除白化 导致联合堆栈的下层中的任何对象变为 再次可见。最终,
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);
}
但是当我运行程序时,我得到的shell返回了255。
有什么想法吗?感谢
答案 0 :(得分:1)
取消删除失败。要找出原因,请检查错误。例如:
#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 :(得分:1)
首先,您需要检查返回值并对其进行评估。如果为-1,则打印错误消息,例如使用perror
或格式化错误消息并使用strerror(errno)
。
但在尝试拨打undelete
之前,您还遇到了一个重大错误:
char a="/Users/Leo/Desktop/test/a.out";
const char* pa=&a;
这将首先将值(指向字符串的指针)分配给char
,即单字节值。编译器甚至用警告警告:初始化从指针生成整数而没有强制转换。在我的情况下,a
然后具有值D
/ 0x44,但它可能有什么都没有。然后,将指针存储在pa
中的单个字节中。你想要的是:
const char* pa="/Users/Leo/Desktop/test/a.out";