C

寫入標準輸出,輸出重定向除外 C

  • November 25, 2011

我必須為學校製作一個簡單的應用程序。

我必須在終端上每行寫一個參數,並在標準輸出上返回使用者選擇。

比如我寫cat my_app main.c main.h,如果使用者選擇了main.c,那麼我就返回main.ccat。問題是,如果我在標準輸出(又名 STDOUT_FILENO)上編寫菜單,我會將其返回到cat. 我可以在 STDERR 上寫我的菜單,但它有點難看。

我真的不知道如何使用/dev/tty*或之類的設備/文件/dev/pty*,但我覺得我可以使用它們在終端上寫一些東西,而不必在 STDOUT 或 STDERR 上寫。

基本上,我想打開一個新的輸出,它將由終端(STDOUT、STDERR、MYOUT)顯示。

我不知道我解釋的是否正確。

要建構一個可以打開的互動式應用程序/dev/tty,它將向控制終端返回一個文件描述符:

int ttyfd = open("/dev/tty", O_RDWR);

您可以使用它來代替STDIN_FILENOor STDOUT_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內容。

引用自:https://unix.stackexchange.com/questions/25291