我正在尝试使用c发送修剪命令,我想出了基于这个答案的方法:how to TRIM a block on SSD disk?。
编译我正在使用的程序
gcc -D_GNU_SOURCE MyCode.c
但我收到以下错误:
TrimCommandsSenders.c:8:37:错误:'off_t'之前的预期表达式 #define IOCATADELETE _IOW(' a',104,off_t [2])
我做错了什么?
以下是我正在使用的完整代码:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
//header - may already be defined
#define IOCATADELETE _IOW('a', 104, off_t[2])
int main(){
//code
int fd = open("/dev/nvme0n1", O_RDWR | O_DIRECT);
off_t ioarg[2];
ioarg[0] = 512; //block number
ioarg[1] = 512; //size
ioctl(fd, IOCATADELETE, ioarg);
close(fd);
return 0;
}
更新
考虑到这些意见我已将我的代码更新为以下内容:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
off_t arr[2];
#define IOCATADELETE _IOW('a', 104, arr)
int main(){
int fd = open("/dev/nvme0n1", O_RDWR | O_DIRECT);
off_t my_ioarg[2];
my_ioarg[0] = 512; //block number
my_ioarg[1] = 512; //size
ioctl(fd, IOCATADELETE, my_ioarg);
close(fd);
return 0;
}
我收到以下错误:
对&#34; _IOW&#34;
的未定义引用
感谢任何帮助。
答案 0 :(得分:1)
编译器生成的错误告诉您未定义宏_IOW
。
这个宏及其生成ioctl命令号的亲属在头文件“/usr/include/asm/ioctl.h”中定义。
包含此标题以解决问题。
有关详细信息,请参阅http://www.circlemud.org/jelson/software/fusd/docs/node31.html