gpt4 book ai didi

c - `off_t` 之前的预期表达式

转载 作者:太空宇宙 更新时间:2023-11-04 10:09:58 31 4
gpt4 key购买 nike

我正在尝试使用 c 发送一个 trim 命令,我想出了基于这个答案的方法:how to TRIM a block on SSD disk? .

编译我正在使用的程序

gcc -D_GNU_SOURCE MyCode.c

但是我收到以下错误:

TrimCommandsSenders.c:8:37: error: expected expression before ‘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;
}

我收到以下错误:

Undefined reference to "_IOW"

感谢任何帮助。

最佳答案

编译器产生的错误告诉你宏_IOW没有定义。

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

包含此 header 以解决问题。

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

关于c - `off_t` 之前的预期表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49706288/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com