我只是试图在HFS+格式化的Volumn上恢复C中的一个文件。根据
man undeleteNAME取消删除--尝试恢复已删除的文件
库标准C库(libc,-lc)
概要#包括
int取消删除(const char *path);
描述
undelete()系统调用尝试恢复按路径命名的已删除文件。目前,只有当命名对象是联合文件系统中的空白时,才能这样做。系统调用移除白值,导致联合堆栈较低层中的任何对象再次可见。
最终,undelete()功能可能扩展到能够恢复已删除文件的其他文件系统,例如日志结构的文件系统。
返回值
如果成功,undelete()函数将返回值0;否则返回值-1,并将全局变量errno设置为指示错误。
所以这个计划很简单:
当前目录(pwd)是/Users/Leo/Desktop/,我使用的是带有HFS+文件系统的Mac10.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。
有什么想法吗?谢谢
发布于 2011-11-04 18:50:48
首先,您需要检查返回值并计算它。如果为-1,则打印错误消息,例如使用perror或格式化错误消息并使用strerror(errno)。
但是,在尝试调用undelete之前,您也有一个主要的bug
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";https://stackoverflow.com/questions/8013895
复制相似问题