我尝试通过错误处理制作自己的fopen
函数,但我想使函数名称与原始名称相同。
#include "xalloc.h"
int main(){
fopen("abc","r");
}
打开文件
#ifndef FOPEN_H
#define FOPEN_H
#include <stdio.h>
FILE*
__real_fopen(const char* filename,const char* mode);
#endif
打开文件
#include "xalloc.h"
#include <stdio.h>
#include <stdlib.h>
void
check_ptr(void* ptr,size_t size){
if(ptr==NULL){
fprintf(stderr,"Fatal: failed to allocate %zu bytes\n",size);
abort();
}
}
FILE*
__wrap_fopen(const char* filename,const char* mode){
FILE* ptr=__real_fopen(filename,mode);
if(ptr==NULL){
fprintf(stderr,"Fatal: failed to open file \"%s\" with mode \"%s\"\n",filename,mode);
abort();
}
return ptr;
}
然后我要用
编译代码gcc -c fopen.c -Wl,--wrap=fopen
gcc -c main.c
gcc main.o fopen.o
我遇到undefined reference to __real_fopen
错误。