当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 2 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 召唤脚本达人! Perl 文件读写 [已解决]
帖子发表于 : 2009-02-08 22:56 

注册: 2008-02-06 13:24
帖子: 31
送出感谢: 0 次
接收感谢: 0 次
看到网上的教程,说perl不能同时读写一个文件,所以就分别打开了两个
打开/dev/ttyX的时候没问题,但是以写方式打开/dev/ttyACM0(我的N73,作为猫连接上了) 的时候,就阻塞了(已经有一个打开的读句柄,不知道这个东西是不是叫句柄呢?)
有没有办法同时读写呢?

代码:
#!/usr/bin/perl
#################################################
##              SMS Sender V0.01               ##
##        Written by Proton 2009-2-8 21:22:14  ##
#################################################

#For learning purpose
#Going to master perl

$tty="/dev/ttyACM0"; #tty used to communicate with my N73 ^_^

#$tty="/dev/tty8"; #for debug

if($#ARGV<1) #Showing help
{
   print <<EOF;
Proton's SMS Sender V0.01
Usage $0 [Phone number] [Text]
EOF
exit(0);
}

#Get info
($pn,@message) = @ARGV;
$message=join(",",@message);

die ("Incorrect phone number!\n") unless $pn =~ /^(\+86)?\d{11}$/;
$pn="+86$pn" unless $pn =~ /^\+86/;


#Begin sending message
open(TTY,$tty) || die("Unable to open $tty!\n");
open(TTYO,">$tty") || die("Unable to open write handle of $tty!\n"); ## 在这一句阻塞

do
{
   $r=<TTY>;
   print $r;
} while not ($r =~ /^OK$/); #wait for the OK state

print TTYO ("AT+CMGF=1\n");
sleep 0.2;
$r = <TTY>;
die('Error while sending instruction AT+CMGF=1') unless $r =~ /^OK$/;

print TTYO ("AT+CMGS=\"$pn\"\n");
sleep 0.5;
#die("Error while sending instruction AT+CMGS=\"$pn\""); #Don't how to handle it... no error recovery code for now.

print TTYO ("$message\x1A\n");
print "Message sent!\n";
sleep 0.5;
close(TTY);
close(TTYO);


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 召唤脚本达人! Perl 文件读写 [已解决]
帖子发表于 : 2009-02-09 17:44 

注册: 2008-02-06 13:24
帖子: 31
送出感谢: 0 次
接收感谢: 0 次
唉……果然是自己动手丰衣足食啊!
程序已经能用了,Intrepid Ibex + Nokia N73
不过只能发送英文
代码:
#!/usr/bin/perl
#################################################
##              SMS Sender V0.01               ##
##        Written by Proton 2009-2-8 21:22:14  ##
#################################################

#For learning purpose
#Going to master perl

$tty="/dev/ttyACM0"; #tty used to communicate with my N73 ^_^

#$tty="fifo"; #for debug

if($#ARGV<1) #Showing help
{
   print <<EOF;
Proton's SMS Sender V0.01
Usage $0 [Phone number] [Text]
EOF
   exit(0);
}

#Get info
($pn,@message) = @ARGV;
$message=join(" ",@message);

#die ("Incorrect phone number!\n") unless $pn =~ /^(\+86)?\d{11}$/;
#$pn="+86$pn" unless $pn =~ /^\+86/;


#Begin sending message
open(TTY,"+>$tty") || die("Unable to open $tty!\n");
#open(TTYO,">$tty") || die("Unable to open write handle of $tty!\n"); ## 在这一句阻塞

#print "OPENED";

print TTY ("\rAT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0\r");

while ( not (($r=<TTY>) =~ /OK/)) {}

print TTY ("AT+CMGF=1\r");
while ( not (($r=<TTY>) =~ /OK/)) {}

print TTY ("AT+CMGS=\"$pn\"\r\r\r\r\r\r\r\r");

$r=<TTY>;

print TTY ("$message\x1A\r");
$r=<TTY>;
print TTY ("\rATZ\r");
$r=<TTY>;
print "Message sent!\n";
close(TTY);


附件:
Screenshot.png
Screenshot.png [ 76.34 KiB | 被浏览 291 次 ]

页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 2 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译