在'off_t`之前的预期表达式

时间:2018-04-07 10:18:05

标签: c linux ioctl

我正在尝试使用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;

的未定义引用

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

编译器生成的错误告诉您未定义宏_IOW

这个宏及其生成ioctl命令号的亲属在头文件“/usr/include/asm/ioctl.h”中定义。

包含此标题以解决问题。

有关详细信息,请参阅http://www.circlemud.org/jelson/software/fusd/docs/node31.html