2016-07-27 31 views
0

ドライブを消去するプログラムを作成しようとしています。いくつかの調査の後、私はすべてのデバイスが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) 

を返されたことがわかりましたか?私はディスクに書き込むだけではいけませんか?

+3

私はあなたの現在の理解度でそれをしないでしょう –

答えて

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失敗開き、グローバル変数* errnoに理由を置きます。 strerrorは、そのエラーコードの説明文字列を返します。

ブロックデバイスにアクセスするには、おそらくプログラムをrootとして実行する必要があります。言うまでもなく、これを行う前にデバッグを非常にうまくやってください。また、システムを台無しにするかもしれません(特に直接ディスクへのアクセスを戸惑っている場合)。

関連する問題