我有2个共享库(让它们是1.so,2.so)和程序(a.out)。 2.so链接到1.so和a.out - 它有一些在1和a中使用的函数。
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)。它创建名称为timestamp(t1)的文件,并在其中写入一些信息。之后1.so调用2.so(func_printer)并创建另一个带时间戳的文件。
在这种情况下是否有可能some_action始终写入t1,但是当程序再次启动时,它应该写入另一个文件。总而言之,当程序启动时,所有库都应该知道文件名在哪里写(没有像文件名那样硬预定文件名,如char * filename =“somefile.txt”;)?
答案 0 :(得分:1)
似乎写入文件的唯一内容是2.so
。只需暴露一个二传手:
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);
}