2009-06-30 28 views
19

Tôi đang viết một chương trình C cho OS X và Linux, và tôi muốn tinh chỉnh đầu ra dựa trên việc nó có đi đến thiết bị đầu cuối hay không. Tôi biết chúng tôi đã trình bày cách thực hiện điều này trong tập lệnh trình bao, ví dụ: ở đây:Phát hiện trong C nếu xuất ra một thiết bị đầu cuối

Detecting the output stream type of a shell script

Nhưng làm thế nào để làm điều đó trong một chương trình C?

Trả lời

36

Sử dụng isatty():

$ man isatty 
ISATTY(3)     Linux Programmer's Manual     ISATTY(3) 

NAME 
     isatty - does this descriptor refer to a terminal 

SYNOPSIS 
     #include <unistd.h> 

     int isatty(int desc); 

DESCRIPTION 
     returns 1 if desc is an open file descriptor connected to a terminal 
     and 0 otherwise. 

Kể từ stdout luôn mô tả tập tin 1, bạn có thể làm:

if(isatty(1)) 
    // stdout is a terminal 
+0

Và bạn có thể giải thích một chút sâu hơn? Điều gì thực sự được kiểm tra bởi chức năng này? Điều gì thực sự có nghĩa là 'kết nối với một thiết bị đầu cuối'? – xolodec

+0

@PavelShvechikov Điều này có nghĩa là bộ mô tả tệp được liên kết với một thiết bị được coi là thiết bị đầu cuối. Xem http://en.wikipedia.org/wiki/POSIX_terminal_interface –

5
if (isatty (1)) 
    fprintf (stdout, "Outputting to a terminal."); 
else 
    fprintf (stdout, "Not outputting to a terminal."); 
Các vấn đề liên quan