1. 程式人生 > >dup函式日誌列印重定向

dup函式日誌列印重定向

嵌入式裝置可能有無法實時檢視除錯列印資訊的時候,可通過將其輸出重定向到檔案中,便於後面讀取該檔案檢視列印資訊。可通過dup函式實現,下面是簡單的實現程式碼,再做些簡單說明。

int main(void)
{
    int stdout_sfd = -1;
    int file_fd = -1;
    int stdout_nfd = -1;
    mode_t old_mask = 0;

    old_mask = umask(0);
    file_fd = open("./note.txt", O_CREAT | O_RDWR | O_APPEND, 00777);
    if (file_fd < 0
) { printf("file_fd open failed. errno = %d.\n", errno); return -1; } umask(old_mask); stdout_sfd = dup(STDOUT_FILENO); stdout_nfd = dup2(file_fd, STDOUT_FILENO); if ((stdout_nfd < 0) || (stdout_sfd < 0)) { printf("dup failed.\n"); return
-1; } printf("write in note.\n") ; dprintf(stdout_sfd, "write in stdout\n"); return 0; }

注意點

1、此處open函式第三個引數不要寫錯了,直接寫成777,那表示10進位制,有效的只有對應二進位制資料的最後9位;需要在前面加兩個0表示其是八進位制資料,或者使用相應的巨集實現,具體可man chmod檢視
2、umask函式用來設定限制新檔案許可權的掩碼,會從建立檔案的許可權中去掉相應的位

dup函式用於複製標準輸出描述符到stdout_sfd,此時兩個描述符引用的是同一個開啟檔案。
dup2函式將file_fd對應開啟的檔案用STDOUT_FILENO描述符表示
printf函式預設往STDOUT_FILENO描述檔案輸出內容,此時便會將內容寫入到note.txt檔案當中,如仍要往螢幕顯示資訊,可通過dprintf指定對應的檔案描述符進行輸出列印