我正在使用libnfs代替C.我正在调用nfs_read,它将字节大小作为uint64_t变量读取。我将大小定义为宏(#define 100)。对于大于24的任何大小值,我主要得到一个段错误(或者有时基于我选择的值的其他错误,但对于特定值总是相同的错误)。我也尝试将#define更改为全局uint64_t。我首先将它放在头文件中,并将其从头文件移动到c文件。但结果总是相同的(如果大小大于24),segfault。
但是当我直接将值(作为硬编码值)传递给函数nfs_read时,对于任何大小的值(< 24或> 24),我都不会得到段错误。
我之前在C中完成了相当数量的项目,并且从未遇到过这样的错误。不知道这里会发生什么。感谢。
typedef struct {
int is_nfs;
int fd;
struct nfs_context *nfs;
struct nfsfh *fh;
}nfs_fd_t;
#define COUNT 100
// The open function is same as in the linked example except for I added nfs_dd_t struct to store nfs and fh
int dd_open(const char *path, int flags, mode_t mode, nfs_fd_t *nfs_fd);
ssize_t read_wrapper(nfs_dd_t *nfs_fd)
{
char * buf = malloc(COUNT);
int ret = dd_read(nfs_fd, buf, COUNT);
// follow up logic
}
ssize_t dd_read(nfs_fd_t *nfs_fd, void *buf, uint64_t count)
{
int ret;
if ((ret = nfs_read((*nfs_fd).nfs, (*nfs_fd).fh, count, (char *)buf)) < 0) {
errno = -ret;
return -1;
}
return ret;
}
nfs_dd_t
是一个包含nfs和fh的结构。我基本上只是根据我的需要对this example进行了略微修改。