Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15498492
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: LINUX

2009-08-04 08:24:23

下面是从网络上摘录的一种比较有意思的变相实现串口数据截获方式,当然还需要加入read操作才行,即cat < /dev/mylo0 > /dev/lp0才行,
有个简单方法,不需要什么源码:

1。 将/dev/lp0改名为 /dev/mylp0
2. 创建一个管道设备文件,名字为/dev/lp0
3. 启动一个后台进程: nohup cat /dev/lp0 | tee lp.log > /dev/mylp0 &




发表于 2008-8-28 14:55 

我想要截获软件打印出来的字符数据,且不影响原来软件的正常工作情况,不知道各位有什么好的办法,或是有什么现成的源码,贴出来分享一下!
谢谢各位!

发表于 2008-8-28 14:58 

楼主问题描述不清楚,是需要一个串口终端软件吗?

发表于 2008-8-28 15:27 

回复 #2 nnnqpnnn 的帖子

我是要截获到串口的数据后在做其他处理的



发表于 2008-8-28 18:09 



QUOTE:
原帖由 ygmok8088 于 2008-8-28 14:55 发表
我想要截获软件打印出来的字符数据,且不影响原来软件的正常工作情况,不知道各位有什么好的办法,或是有什么现成的源码,贴出来分享一下!
谢谢各位!

有个简单方法,不需要什么源码:
1。 将/dev/lp0改名为 /dev/mylp0
2. 创建一个管道设备文件,名字为/dev/lp0
3. 启动一个后台进程: nohup cat /dev/lp0 | tee lp.log > /dev/mylp0 &
发表于 2008-8-28 20:43 

回复 #4 zszyj 的帖子

这样我从那个文件中取数据?如何创建一个管道设备文件?是命名管道还是管道?请说的详细点,谢谢回帖!


发表于 2008-8-28 21:05 

他所说的管道文件,应该是一个中间周转性质的文件,可以好好看看关于PIPE的用法!
发表于 2008-8-28 21:49 



QUOTE:
原帖由 ygmok8088 于 2008-8-28 20:43 发表
这样我从那个文件中取数据?如何创建一个管道设备文件?是命名管道还是管道?请说的详细点,谢谢回帖!

通过tee命令,所有的输出内容,除了会往/dev/mylp0送之外,还会同样复制一份到lp.log中,从这个文件就能看到打印的内容。
管理设备即命名管道,用 mknod /dev/lp0 p  主ID 副ID就可以创建

发表于 2008-8-29 09:38 

回复 #7 zszyj 的帖子

在lp.log中取数据是吧
那串口ttys0该怎样做
我用mknod /dev/ttys0 p  创建了一个命名管道,如果加主ID 副ID就不无法创建,它提示不用主ID 副ID
然后我用nohup cat /dev/ttys0 | tee lp.log > /dev/ttys0 &
提示输入输出错误,
然后我改用nohup cat /dev/ttys0 | tee lp.log > /dev/ttys0 &
没有错,但是向串口写数据时出错
提示:tcsetattr fd:invalid argument
setupserial 1:invalid argument
设置奇偶校验错误 set parity error
我仔细看了是我串口程序中的错误提示

也就是用这样的方法好像不可以用

请指点!谢谢
发表于 2008-8-29 09:54 

你可使用重定向输出,或者在代码里加个调试语句,unix下有个syslog的函数,可以记录日志文件

发表于 2008-8-29 09:56 



QUOTE:
原帖由 ygmok8088 于 2008-8-29 09:38 发表
在lp.log中取数据是吧
那串口ttys0该怎样做
我用mknod /dev/ttys0 p  创建了一个命名管道,如果加主ID 副ID就不无法创建,它提示不用主ID 副ID
然后我用nohup cat /dev/ttys0 | tee lp.log > /dev/ttys0 &
...

我 测试了一下, cat /dev/ttys0 | tee lp.log 这个命令是没有问题的,我另外用一个终端执行ls > /dev/ttys0, 前一个命令就能将内容在屏幕显示而且保存到lp.log中。但有一个小毛病就是cat 命令显示完一次,就会认为文件结束而退出了, 因此可能得加个for 循环。 另外你提到的输入输出错,你觉得是你的 ">/dev/ttys0"错了,应该是改名后的串口才对,比如/dev/mys0.





阅读(1879) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~