| 项目搜索 |
| |
|
代码片段库:
查看代码片段
浏览
| 提交新的代码片段
| 创建代码包
检测重定向
|
类型:
Sample Code (HOWTO) |
类别:
Other
|
许可证:
GNU General Public License |
语言:
C
|
描述:
显示怎样检测stdin, stdout, stderr是否被重定向。
|
该代码片段的版本系列:
片段ID |
下载版本 |
提交时间 |
提交人 |
删除 |
2 | 0.1 | 2001-07-24 10:49 | bbsadmin | |
点击"下载版本"来下载该代码片段.
最新版本的代码片段: 0.1
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
/* --------------------------------------------------------------
detecting_redirection
Part of the SourceLib Project at LinuxProgramming.com
http://linuxprogramming.com/SourceLib
This sample program has been released into the public domain.
Purpose: Detect, separately, whether stdin, stdout, and
stderr have been redirected or are connected to a real terminal.
Use the command "make" to build this program, and then "make
stdin", "make stdout", or "make stderr" to test it by redirecting
each one.
---------------------------------------------------------------
All our program does is display our ever friendly message and
terminate normally.
--------------------------------------------------------------- */
/* -------------------------------------------------------------
This function prints the two strings passed to it, separated
by a blank, to either stdout or stderr, depending on the value
of the flag use_stdout.
------------------------------------------------------------- */
void emit(char *device_name, char *message_text, int use_stdout)
{
if(use_stdout)
printf("%s %s",device_name,message_text);
else
fprintf(stderr,"%s %s",device_name,message_text);
}
/* -------------------------------------------------------------
This function does the real work in this sample, as it uses
the isatty() function to check if the system file (which is
specified by its file number) is redirected, and then uses
the emit() function to tell the world about what it found.
------------------------------------------------------------- */
void reportOnDevice(int file_number, char *device_name, int use_std_out)
{
if(isatty(file_number) == 1)
emit(device_name,"is connected to a terminal.\n",use_std_out);
else
emit(device_name,"is NOT connected to terminal.\n",use_std_out);
}
/* -------------------------------------------------------------
The main program sets the use_stdout flag to indicate how
emit() should display text. This prevents text from being
redirected into a file when we'd prefer to see it on the screen.
We then use reportOnDevice() to check stdin, stdout, and
stderr.
------------------------------------------------------------- */
int main(int argc, char **argv)
{
int use_stdout = 1;
if(isatty(STDOUT_FILENO) != 1)
use_stdout = 0;
emit("","----------------------------------------------\n\n",use_stdout);
reportOnDevice(STDIN_FILENO,"stdin",use_stdout);
reportOnDevice(STDOUT_FILENO,"stdout",use_stdout);
reportOnDevice(STDERR_FILENO,"stderr",use_stdout);
emit("","\n\n",use_stdout);
/* Indicate normal termination via the
EXIT_SUCCESS constant from stdlib.h */
return EXIT_SUCCESS;
}
如果您修改了一个代码片段并且觉得很应该让别人共享,您可以把这作为这个代码片段的最新版本提交上来. |
|