2012-10-05 17 views
3

我有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

我理解這個權利:你想讓你的應用程序每次運行寫一個文件?文件名應該從一次運行改變到下一次(假設你不會每秒運行一次該應用程序)? – alk

+0

是的,所有它稱爲寫入一個文件的庫 –

+0

所以我不太瞭解你需要知道什麼。 – alk

回答

1

看起來寫入文件的唯一東西是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); 
} 
+0

這可能是我沒有真正知道OP的問題。但我在你的回答中沒有看到任何幫助...... – alk

+0

我把它歸結爲:他從各個地方調用'func_printer'並且想要控制'func_printer'把它的輸出放在哪裏。解決方案:添加一個控制'func_printer'放置其輸出的函數。 – willglynn

+0

以及如何控制func_printer的控制函數? –