dup函式日誌列印重定向
阿新 • • 發佈:2019-01-29
嵌入式裝置可能有無法實時檢視除錯列印資訊的時候,可通過將其輸出重定向到檔案中,便於後面讀取該檔案檢視列印資訊。可通過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指定對應的檔案描述符進行輸出列印