Chinaunix

标题: 怎么让库里的printf函数不输出数据到屏幕? [打印本页]

作者: kingjian    时间: 2003-12-31 14:42
标题: 怎么让库里的printf函数不输出数据到屏幕?
怎么让库里的printf函数不输出数据到屏幕?

我要用到别人的静态库里的函数,可是这个函数它里面用了Printf语句

我现在不想要它printf

请问有什么办法吗?

除了改库函数
作者: lenovo    时间: 2003-12-31 14:46
标题: 怎么让库里的printf函数不输出数据到屏幕?
估计是不可能。
作者: 蓝色键盘    时间: 2003-12-31 15:19
标题: 怎么让库里的printf函数不输出数据到屏幕?
1、运行的时候 1>;/dev/null 2>;&1
2、用自定义的一个空的函数代替printf,并且屏蔽掉系统printf
作者: bjf    时间: 2003-12-31 15:26
标题: 怎么让库里的printf函数不输出数据到屏幕?
在程序开头增加这样几句话:

fd = open();//打开一个文件,如果不想写到文件里去,就打开/dev/null文件
close(1);
dup(fd);
作者: lenovo    时间: 2003-12-31 15:29
标题: 怎么让库里的printf函数不输出数据到屏幕?
这样做的话,那所有的printf语句打印出
的语句都没了,估计不是他想要的。
作者: gadfly    时间: 2003-12-31 15:41
标题: 怎么让库里的printf函数不输出数据到屏幕?
那可以之后close(1), open "/dev/tty",

做个封装好了。
作者: 蓝色键盘    时间: 2003-12-31 15:41
标题: 怎么让库里的printf函数不输出数据到屏幕?
春定向到一个文件
作者: bjf    时间: 2003-12-31 15:42
标题: 怎么让库里的printf函数不输出数据到屏幕?
看了lenovo的帖子,我好象是理解错了。

他只想屏蔽掉别人的那个函数里面的printf,可以自己写一个函数来把别人的那个包一下,在调用别人的函数之前关闭标准输出,调用完之后再打开。
作者: 蓝色键盘    时间: 2003-12-31 15:58
标题: 怎么让库里的printf函数不输出数据到屏幕?
这个问题好的解决办法,我觉得是操作stdout和stderr,调用自己的打开并且设置为系统默认,调用别人的话,冲定向或者close了都行。

当然如果自己写个printf的话,控制别人和自己的代码,用和宏业可以简单的实现。

方法很多,看楼主喜欢那个了?
呵呵
作者: forest077    时间: 2004-01-01 10:01
标题: 怎么让库里的printf函数不输出数据到屏幕?
这个问题我有一个很不错的解决方法。首先明确一下,楼主的需求应该是不需要库里面的printf函数输出到屏幕,但是自己程序的printf照样能够输出到屏幕。
方法是:
1、在调用这个库函数之前,使用freopen将输出定向到别的文件,或是/dev/null,如下:
fp=freopen("/dev/null","w",stdout); //第一个参数如果是文件名,则库里面的输出写到这个文件里面
2、然后调用库函数。
3、调用完毕后把输出重定向回自己的屏幕上面来,如下:
fpp=popen("tty","r";
fgets(str,sizeof(str),fpp);
str[strlen(str)-1]=0;
freopen(str,"w",fp);
这样下面的printf就输出到自己登陆的屏幕上。
如果不喜欢用popen来获取自己登录的tty,也可以写在环境变量里面。在.profile里面加上一句:export TTY=`tty`
运行一下.profile让环境变量输出。
然后把上述第三步改为freopen(getenv("TTY","w",fp)即可




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2