ENGLISH 意见建议 网站地图 网站帮助
广泛智力汇聚   高效成果传播   先进机制培育
联盟首页  |  协同开发  |  开放源码库  |  安全告警  |  开源导航  |  文档中心  |  服务支持  |  共创论坛  |  关于联盟


注册会员 网站帮助
    您的位置 »
    今天是: 2010年11月22日    
项目搜索

完全匹配   
开源软件
软件分类表
新发布软件
其它网站镜像
代码片断
协同开发
文档
论坛
寻求协助
热点项目
站点状态
编译工厂

联系我们
关于联盟

代码片段库:
查看代码片段

浏览 | 提交新的代码片段 | 创建代码包

检测重定向

类型:
Sample Code (HOWTO)
类别:
Other
许可证:
GNU General Public License
语言:
C
 
描述:
显示怎样检测stdin, stdout, stderr是否被重定向。

该代码片段的版本系列:

片段ID 下载版本 提交时间 提交人 删除
20.12001-07-24 10:49bbsadmin

点击"下载版本"来下载该代码片段.


最新版本的代码片段: 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;
}


		

提交新版本

如果您修改了一个代码片段并且觉得很应该让别人共享,您可以把这作为这个代码片段的最新版本提交上来.


联盟团体会员
合作伙伴
© 共创软件联盟 版权所有
联盟服务条款 | 联盟隐私权规则 | 联系我们
电话: (8610)68313388-5949 | 传真: (8610)88377936
京ICP备05056057号