我有2个共享库(让他们是1.so,2.so)和程序(a.out)。 2.so与1.so和a.out相关 – 它有一些用于1和a的function。
2.so的代码是
FILE *in; char filename[128]; int func_printer(int a) { if(strlen(filename)==0) { sprintf(filename,"%ld",time(NULL); } if((in=fopen(filename,"a"))==NULL)return; fprintf(in,"%i",a); fclose(in); }
a.out有下一个
extern int func_printer(int); extern void some_action(); int main() { some_action(); func_printer(2); return 0; }
最后1.so方法some_action
extern int func_printer(int); void some_action() { func_printer(1); printf("hello world"); return; }
所以当a.out启动时,它会调用1.so(some_action()),并调用2.so(func_printer)。 它创build一个名为timestamp(t1)的文件,在其中写入一些信息。 之后1.so调用2.so(func_printer),它创build另一个文件的时间戳。
是否有可能在这种情况下some_action总是写入t1,但是当程序再次启动时,它应该写入另一个文件。 总而言之,只要程序启动时,所有的库应该知道文件名在哪里写(不需要像文件名char _ filename =“somefile.txt”;)。
看起来写入文件的唯一东西是2.so
只要暴露一个setter:
char filename[128]; void set_filename(char * path) { strncpy(filename, sizeof(filename), path); filename[sizeof(filename) - 1] = '\0'; } int func_printer(int a) { FILE *in; if(strlen(filename)==0) { sprintf(filename,"%ld",time(NULL); } if((in=fopen(filename,"a"))==NULL)return; fprintf(in,"%i",a); fclose(in); }