首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用C中的undelete()恢复已删除的文件

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

Stack Overflow用户
提问于 2011-11-04 18:10:28
回答 1查看 2K关注 0票数 2

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

代码语言:javascript
运行
复制
man undelete

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

标准C库(libc,-lc)

概要#包括

int取消删除(const char *path);

描述

undelete()系统调用尝试恢复按路径命名的已删除文件。目前,只有当命名对象是联合文件系统中的空白时,才能这样做。系统调用移除白值,导致联合堆栈较低层中的任何对象再次可见。

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

返回值

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

所以这个计划很简单:

当前目录(pwd)是/Users/Leo/Desktop/,我使用的是带有HFS+文件系统的Mac10.7.2。

代码语言:javascript
运行
复制
#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。

有什么想法吗?谢谢

EN

Stack Overflow用户

发布于 2011-11-04 18:50:48

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

但是,在尝试调用undelete之前,您也有一个主要的bug

代码语言:javascript
运行
复制
char a="/Users/Leo/Desktop/test/a.out";
const char* pa=&a;

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

代码语言:javascript
运行
复制
const char* pa="/Users/Leo/Desktop/test/a.out";
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8013895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档