この問題に基づいています。
目的:受信トレイに新しい未読メッセージがある場合にキーボードのLEDを点滅させる方法を学びます。
追加します。 条件:OS-Linux、言語-perl(メールチェック)およびbash(実際に点滅)。
実際、最初のトピックでアドバイスしたように、問題をコンポーネントに分割します。
- ダイオードを点滅させることを学ぶ
- 新しいメッセージがないかメールを確認する方法を学ぶ
- 両方のアイテムを友達にする
ダイオードを点滅させることを学ぶ
Ledcontrolデーモンはありますが、リポジトリにはありませんでしたので、
xsetコマンドを使用してカーソルを点滅させます
このコードはbeepScrollファイルに保存され、ファイルは$ PATHにリストされているディレクトリのいずれかに置かれ、実行権が与えられました。 SIGINTを受信すると、LEDをオフにし、トラップ経由でオフにすることに注意してください。
新しいメッセージのメールをチェックすることを学ぶ
sub mymail(){ use Mail::IMAPClient; use IO::Socket::SSL; while (42){ my $user = 'login'; my $server = 'server.ltd'; my $pass = 'P@ssw0rd'; my $socket = IO::Socket::SSL->new( PeerAddr => $server, PeerPort => 993, ) or die "socket(): $@"; my $imap = Mail::IMAPClient->new( Socket => $socket, Server => $server, User => $user, Password => $pass, Debug => 0) or die "Cannot connect to $server as $user: $@"; my $not_read; foreach my $f ($imap->folders) { my $i = $imap->unseen_count($f)||0 ; $not_read += $i; } $imap->logout(); print $not_read; } }
ここで必要なモジュールを接続し(Mail :: IMAPClientは標準配信に含まれません、個別に配信する必要があります)、1)imapを介してサーバーに接続し、INBOXディレクトリとそのサブディレクトリで未読メッセージの数を受信し、その数を返し、待機します分から始まり、最初から始まります。
みんな一緒
ここで、私はもっと詳しく説明したいと思います。 2つのスレッドを実行します。 最初のものはメールをチェックし、未読メッセージの数を2番目に送信します。 2番目は最初からメッセージを受信し、カーソルで点滅スクリプトを開始/停止します。
だから:
2番目のスレッドに参加するということは、アクションを続行する前に、このスレッドの終了を待つ必要があることを意味します。
myleds関数コード自体:
sub myleds(){ my $beep = 0;
、および関数mymail()で置換する必要があります
prinr $not_read
に
$mypipe->enqueue($not_read+1)
「$ not_read + 1」は、whileが0になった場合、条件が偽と見なされるためです。