我有 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)。它创建名称为时间戳(t1)的文件,并在其中写入一些信息。之后 1.so 调用 2.so(func_printer) 并创建另一个带有时间戳的文件。
在这种情况下是否有可能 some_action 总是写入 t1,但是当程序再次启动时,它应该写入另一个文件。总而言之,当程序启动时,所有库都应该知道要写入的文件名(无需像 char *filename="somefile.txt"; 那样硬预定义文件名)?