> 目前我是修改函数接口,传入 filename 参数,然后修改那一行代码为:
>
> if (ngx_file_info((u_char*)filename, &fi) == NGX_FILE_ERROR)
>
> 另外,您是如何在Windows下编译nginx的?哪个 nginx 的版本?
>
>
> Richard Chen
>
>
>
>
> On Mon, Oct 8, 2012 at 5:44 PM, Wayne <
moonb...@gmail.com> wrote:
>>
>> 在windows下编译了包含ngx_lua等扩展的nginx,使用luac字节码时,在代码
>>
https://github.com/chaoslawful/lua-nginx-module/blob/master/src/ngx_http_lua_clfactory.c
>> 的350行 :if (ngx_fd_info(fileno(lf->f), &fi) == NGX_FILE_ERROR)
>> 条件成立,进入了错误处理。在linux下面没有问题。
>> 查找了下出错的原因:fileno函数在linux和windows下都返回int类型;
>> ngx_fd_info在unix\ngx_files.h下定义为#define ngx_fd_info(fd, sb) fstat(fd,
>> sb),第一个参数为int类型;
>> ngx_fd_info在win32\ngx_files.h下定义为#define ngx_fd_info(fd, fi)
>> GetFileInformationByHandle(fd, fi)。
>> 而GetFileInformationByHandle函数的第一个参数类型不是int,而是HANDLE
>>
>> 修改这个if判断,进行类型转换:if (ngx_fd_info((HANDLE)_get_osfhandle(fileno(lf->f)),
>> &fi) == NGX_FILE_ERROR) 。重新编译,字节码的功能在windows就能用了。
>> 但是,在linux下面就有问题了。。。如果要实现跨平台,代码应该怎么写比较好呢?
>>
>>
>>
>
>