如何在c中直接写入磁盘

时间:2016-07-27 16:25:51

标签: c ubuntu filesystems

所以我正在尝试制作一个擦除驱动器的程序。经过一些研究,我发现所有设备都存储在Ubuntu的/ dev /文件夹下。我试过以下......

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
    FILE *fp = fopen("/dev/sdb1", "w");
    fwrite("\0", 1, 1, fp);
    fclose(fp);
    return 0;
}

但发现它返回了

Segmentation fault (core dumped)

这是为什么?我不应该只能写入磁盘吗?

1 个答案:

答案 0 :(得分:2)

您很可能无权打开/dev/sdb1。在尝试使用之前,请检查fopenfp)的结果:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>

int main(int argc, char *argv[]){
    FILE *fp = fopen("/dev/sdb1", "w");
    if(fp == NULL){
        fprintf(stderr, "Error opening /dev/sdb1: %s\n", 
                strerror(errno));
        return EXIT_FAILURE;
    }
    /* Now you can use fp */
    fwrite(0, 1, 1, fp);
    fclose(fp);

    return 0;
}
打开失败时,

fopen会返回NULL,并将原因放入全局*变量errnostrerror返回该错误代码的描述性字符串。

您可能需要以root身份运行程序才能访问块设备。不用说,在这样做之前调试它,或者你可能会破坏你的系统(特别是如果你正在搞乱直接磁盘访问)。