2012-04-04 6 views
5

Cプログラムでは、LinuxカーネルにSSDディスク上のブロックをTRIMに指示するにはどうすればよいですか? 私はopen()のデバイスとfcntl()何かがあると思いますが、何ですか? 汎用である必要があります(つまり、別のSSDディスクで作業する)SSDディスク上のブロックをTRIMする方法は?

注:デバイスには未処理のデータだけがあります。

答えて

6

IOCATADELETEを送信します。このようなもの:

//header - may already be defined 
#define IOCATADELETE _IOW('a', 104, off_t[2]) 

//code 
int fd = open("/dev/abc", O_RDWR | O_DIRECT); 
off_t ioarg[2]; 
ioarg[0] = 0; //block number 
ioarg[1] = 0; //size 
ioctl(fd, IOCATADELETE, ioarg); 
close(fd); 
+0

ありがとう、これは私が必要なものです – Nulik

+0

"104"とは何ですか?それはTRIMコマンドの数ですか、それとも複数の数字で構成されていますか? –