我的 C 函数采用 FILE 指针的地址(指向指针的指针)。我从Go调用此方法。有人可以给我一个在Go中调用约定的示例代码行吗?FILE **fp
C 库代码(将创建 .so 文件):
int fileOpen(char *filename, char* mode, FILE **fp){
*fp = fopen (filename, mode);
if (*fp ==NULL)
return -1;
return 0;
}
int fileread(FILE *fp,char *buff ){
if((fp!=NULL)&&( fgets ( buff, 50, fp) != NULL ) )
{
return 0;
}
return -1;
}
int fileclose(FILE *fp){
fclose(fp);
return 0;
}
import "C"
type (
fileptr C.FILE
)
func opencfile(name string, mode string) int {
var fp *fileptr
return (int)(C.fileOpen(C.CString(name), C.CString(mode), C.FILE(&fp)));
}
我收到错误
无法将_cgoBase2(类型 **fileptr) 转换为类型 _Ctype_struct__IO_FILE
问题:
这是调用 C 方法的正确方法吗?
如何从Go传递文件指针的地址?或如何解决上述错误。
所谓的“C”方法原型是:
int fileOpen(char *filename, char* mode, FILE **fp);
更新:这是我的最新代码:
C 代码(.c 文件)
#include "fileOp_lib.h"
int fileOpen(char *filename, char* mode, fileptr *out){
FILE *fp = fopen(filename, mode);
if (fp == NULL) {
*out = 0;
return -1;
}
*out = (fileptr) fp;
return 0;
}
int fileread(fileptr fp, char *buff){
if( (fp != 0) && (fgets(buff, 50, (FILE*)fp) != NULL) )
return 0;
return -1;
}
int fileclose(fileptr fp){
fclose((FILE*)fp);
return 0;
}
头文件(.h 文件)
#include <stdio.h>
typedef unsigned int fileptr;
int fileOpen(char *filename, char* mode, fileptr *out);
//int fileread(FILE *fp,char *buff ); temp. commented
//int fileclose(FILE *fp);
围棋代码
package main
/*
#cgo LDFLAGS: -L./SAMPLE/ -lfileop
#include "fileOp_lib.h"
*/
import "C"
type (
fileptr uintptr
)
func opencfile(name string, mode string) int {
var fp fileptr;
return (int)(C.fileOpen(C.CString(name), C.CString(mode), (&fp)));
}
func main(){
var e int;
e = opencfile("data.txt","r");
}
墨色风雨
30秒到达战场
相关分类