我是一个有抱负的C++程序员,我已经连续几年编程了,但是我没有多少有用的知识。现在我正在研究文件系统的安全性,所以我决定写一个擦除(想想BleachBit)。
它需要从终端(根/程序filename.something)运行,需要在内存中打开文件,获取文件大小,以原始二进制格式写入文件的每一个位,关闭文件。这是我陷入困境的一部分。它需要删除(我确信是某种指针)对象,该对象表示系统存储的文件,方法是从内存中删除它。
ren.cpp:
#include <stdio.h>
#include <string>
void bitwrite(int pass, char * fn)
{
FILE * fp;
fp = fopen(fn, "wb");
int k;
const void * kptr;
switch(pass)
{
case 0:
k = 0b11111111111111111111111111111111;
break;
case 1:
k = 0b10101010101010101010101010101010;
break;
case 2:
k = 0b01010101010101010101010101010101;
break;
case 3:
k = 0b11111111111111111111111111111111;
break;
case 4:
k = 0b10101010101010101010101010101010;
break;
case 5:
k = 0b01010101010101010101010101010101;
break;
case 6:
k = 0b00000000000000000000000000000000;
break;
}
fseek(fp, 0, SEEK_END);
off_t size = ftell(fp);
fseek(fp, 0, SEEK_SET);
for(int a = 0; a<sizeof(size);a++)
{
fseek(fp, a, SEEK_SET);
fwrite(&k, sizeof(int), 1, fp);
}
fclose(fp);
}
int main(int argc, char * argv[])
{
if(argv == NULL)
{
printf("usage: ren file to be destroyed");
return 1;
}
for(int i=0;i<7;i++)
{
bitwrite(i, argv[1]);
}
printf("success!");
return 0;
}
这段代码需要尽可能高效地运行。我不知道如何改进和修正错误。目前,C++ ren.cpp -o ren运行时没有出现错误,但是gdb抛出一个sigseg @-o。
发布于 2018-06-05 01:33:16
与switch
不同,只需使用数组即可。
k= pattern[pass];
不要将C宏NULL
用于任何目的。把它从你的记忆中抹去!
C++的样式是将*
或&
与类型放在一起,而不是使用标识符。这是在Stroustrup的第一本书的开头特别提到的,并且是与C风格的一个有意的区别。
当您不使用任何<string>
时,为什么要包括它呢?这里根本没有C++标准库中的任何内容。我觉得那是个C程序。
https://codereview.stackexchange.com/questions/195849
复制相似问题