C
寫入標準輸出,輸出重定向除外 C
我必須為學校製作一個簡單的應用程序。
我必須在終端上每行寫一個參數,並在標準輸出上返回使用者選擇。
比如我寫
cat my_app main.c main.h
,如果使用者選擇了main.c
,那麼我就返回main.c
cat。問題是,如果我在標準輸出(又名 STDOUT_FILENO)上編寫菜單,我會將其返回到cat
. 我可以在 STDERR 上寫我的菜單,但它有點難看。我真的不知道如何使用
/dev/tty*
或之類的設備/文件/dev/pty*
,但我覺得我可以使用它們在終端上寫一些東西,而不必在 STDOUT 或 STDERR 上寫。基本上,我想打開一個新的輸出,它將由終端(STDOUT、STDERR、MYOUT)顯示。
我不知道我解釋的是否正確。
要建構一個可以打開的互動式應用程序
/dev/tty
,它將向控制終端返回一個文件描述符:int ttyfd = open("/dev/tty", O_RDWR);
您可以使用它來代替
STDIN_FILENO
orSTDOUT_FILENO
(在程序啟動時,它們可能被重定向到與終端不同的東西)。下面是一些例子:
#include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int main() { int ttyfd = open("/dev/tty", O_RDWR); printf("fd: %d\n", ttyfd); write(ttyfd, "hello tty!\n", 11); return 0; }
當使用 呼叫時
./test >out
,它應該在終端上列印 hello 消息以及類似文件fd: 3
中的out
內容。