2012-09-05 74 views
3

我希望抑制函數smbc_opendir()的默認輸出,並僅使用printf進行打印。如何抑制庫函數的輸出

GCC FILENAME.C -lsmbclient

#include <libsmbclient.h> 
#include <stdio.h> 

void auth_fn() 
{ 

} 

int main(int argc,char* argv[]) 
{ 
    int dirHandle; 
    if(smbc_init(auth_fn, 10)) /* Initialize things */ 
    { 
    return 0; 
    } 
    dirHandle= smbc_opendir(argv[1]); /* Argument is smb://<ip-address>/ */ 
    /* Just display value of dirHandle in output and nothing else */ 
    printf("%d",dirHandle); 
    return 0; 
} 
+1

如果'smbc_opendir'被寫入'stderr'那麼你可以暫時重定向'stderr'到'的/ dev/null',然後再把它恢復。 –

+0

它寫入標準輸出 –

+0

好 - 同樣的原則適用於'stdout'。 –

回答

4

嘗試調試級別0,應只記錄關鍵錯誤:smbc_init(auth_fn, 0)

+0

謝謝,它完美地做了我想要的!你似乎知道libsmbclient。它不是線程安全的,是否仍然有可能在單獨的線程中運行smbc_opendir()的每個實例! –

+0

@adnankamili據我所知,它不是設計爲線程安全的。至少不是兩三年前(我很久沒有使用它)。 – Rost

+0

@adnankamili所以我想 - 不,你不能在MT環境中使用它。 – Rost

3

您可以重定向標準輸出或爲一些諸如標準錯誤:

stderr = freopen("/dev/null", "w", stderr); 

然後調用smbc_opendir。

+0

如何將輸出恢復爲標準輸出 –