所以我正在尝试制作一个擦除驱动器的程序。经过一些研究,我发现所有设备都存储在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)
这是为什么?我不应该只能写入磁盘吗?
答案 0 :(得分:2)
您很可能无权打开/dev/sdb1
。在尝试使用之前,请检查fopen
(fp
)的结果:
#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
,并将原因放入全局*变量errno
。 strerror
返回该错误代码的描述性字符串。
您可能需要以root身份运行程序才能访问块设备。不用说,在这样做之前调试它,或者你可能会破坏你的系统(特别是如果你正在搞乱直接磁盘访问)。