Linuxでシリアル接続をするときのメモ
1. screenインストール
atmark@atde3:~$ sudo apt-get install screen
2. screenで接続
$ screen /dev/ttyUSB0 115200
/dev/ttyUSB0 は変わる場合があります。
2011年12月20日火曜日
システムプログラミング:プロセス間通信(メッセージキュー利用)
[msend.c]
atmark@atde3:~/Desktop/work$ gcc -o mrecv mrecv.c
atmark@atde3:~/Desktop/work$ gcc -o msend msend.c
atmark@atde3:~/Desktop/work$ ./msend
Enter message: Hello
atmark@atde3:~/Desktop/work$ ./msend
Enter message: Good
atmark@atde3:~/Desktop/work$ ./mrecv
message received from 10658
Hello
message received from 10659
Good
#include <stdio.h>
#include <stdlib.h>
#include <="" span="">ipc.h>
#include <="" span="">types.h>
#include <unistd.h>
int main(){
struct msgbuf{
long
mtype;
char
mtext
[256];
};
char
line [256];
int msqid;
key_t msgkey;
struct msgbuf msgdata, *p;
p=&msgdata;
printf
(“Enter message: “);
fflush (stdout);
fgets
(line, sizeof
(line), stdin);
if
(sscanf
(line, “%[^\n]”,
p->mtext)
>0){
// プロセスIDをmtypeに入れる
p->mtype=getpid ();
msgkey=ftok (“mrecv”,
‘a’);
// メッセージキュー識別子を得る
msqid=msgget (msgkey,
IPC_CREAT | 0666);
// メッセージを送信する
msgsnd (msqid, p, sizeof
(p->mtext),
0);
}
return
EXIT_SUCCESS;
}
[mrecv.c]
#include <stdio.h>
#include <stdlib.h>
#include <="" span="">ipc.h>
#include <="" span="">msg.h>
#include <="" span="">types.h>
int main(){
struct msgbuf{
long
mtype;
char
mtext
[256];
};
int msqid;
key_t msgkey;
struct msgbuf msgdata, *p;
p=&msgdata;
msgkey=ftok (“mrecv”,
‘a’);
// メッセージキュー識別子を得る
msqid=msgget (msgkey,
IPC_CREAT | 0666);
while
(1){ //無限ループ
// メッセージを受信する
msgrcv (msqid, p, sizeof
(p->mtext), 0,
0);
printf
(“message received from %ld\n%s\n”
,p->mtype,
p->mtext);
}
return
EXIT_SUCCESS;
}
atmark@atde3:~/Desktop/work$ gcc -o mrecv mrecv.c
atmark@atde3:~/Desktop/work$ gcc -o msend msend.c
atmark@atde3:~/Desktop/work$ ./msend
Enter message: Hello
atmark@atde3:~/Desktop/work$ ./msend
Enter message: Good
atmark@atde3:~/Desktop/work$ ./mrecv
message received from 10658
Hello
message received from 10659
Good
システムプログラミング:シグナル利用
Ctr+Z(SIGTSTP)を押したら経過時間を表示するプログラム
atmark@atde3:~/Desktop/work$ ./timer
. . . . . . . . . . ^Z\nelapsed time= 10 seconds
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
time_t start;
int main(){
void
stop ();
time
(&start);
// SIGTSTPが発生したら関数stopを実行
signal
(SIGTSTP, stop);
while
(1){
sleep
(1);
printf (“ .
“);
fflush (stdout);
}
return
EXIT_FAILURE;
}
void stop (){
time_t end;
time
(&end);
printf (“\n”);
printf
(“elapsed time= %ld
seconds\n”,
end-start);
exit
(EXIT_SUCCESS);
}
atmark@atde3:~/Desktop/work$ ./timer
. . . . . . . . . . ^Z\nelapsed time= 10 seconds
システムプログラミング:プロセス間通信(pipe利用)
親プログラムで入力したものを、子プログラムを処理し親プログラムに返す
[parent.c]
int main(){
char line[32];
char read_fd[3], write_fd[3];
int number, result;
int fd[2];
int st;
if (pipe(fd) <0){
perror("pipe");
exit (EXIT_FAILURE);
}
snprintf (read_fd, sizeof (read_fd),"%d", fd[0]);
snprintf (write_fd, sizeof (write_fd),"%d", fd[1]);
fgets (line, sizeof (line), stdin);
if (sscanf (line,"%d", &number) >0){
if (fork () == 0){
if (execl ("child", "child", read_fd, write_fd, NULL) <0){
exit (EXIT_FAILURE);
}
}
write (fd[1], &number, sizeof (number));
wait (&st);
read (fd[0], &result, sizeof (result));
printf ("%d x %d = %d\n", number, number, result);
close (fd[0]);
close (fd[1]);
}
return EXIT_SUCCESS;
}
[child.c]
#include <stdlib.h>
#include <unistd.h>
int main (int argc, char *argv[]){
int number, result;
int read_fd, write_fd;
// 引数の文字列を整数に変換
read_fd = atoi (argv[1]);
write_fd = atoi (argv[2]);
// パイプラインからデータを読み込む
read (read_fd, &number, sizeof (number));
result = number*number;
// パイプラインにデータを書き込む
write (write_fd, &result, sizeof (result));
close (read_fd);
close (write_fd);
return EXIT_SUCCESS;
}
atmark@atde3:~/Desktop/work$ ./parent
3
3 x 3 = 9\natmark@atde3:~/Desktop/work$
[parent.c]
#include <stdio.h>
#include <stdlib.h>
#include <="" span="">types.h>
#include <="" span="">wait.h>
#include <unistd.h>
char line[32];
char read_fd[3], write_fd[3];
int number, result;
int fd[2];
int st;
if (pipe(fd) <0){
perror("pipe");
exit (EXIT_FAILURE);
}
snprintf (read_fd, sizeof (read_fd),"%d", fd[0]);
snprintf (write_fd, sizeof (write_fd),"%d", fd[1]);
fgets (line, sizeof (line), stdin);
if (sscanf (line,"%d", &number) >0){
if (fork () == 0){
if (execl ("child", "child", read_fd, write_fd, NULL) <0){
exit (EXIT_FAILURE);
}
}
write (fd[1], &number, sizeof (number));
wait (&st);
read (fd[0], &result, sizeof (result));
printf ("%d x %d = %d\n", number, number, result);
close (fd[0]);
close (fd[1]);
}
return EXIT_SUCCESS;
}
[child.c]
#include <unistd.h>
int main (int argc, char *argv[]){
int number, result;
int read_fd, write_fd;
// 引数の文字列を整数に変換
read_fd = atoi (argv[1]);
write_fd = atoi (argv[2]);
// パイプラインからデータを読み込む
read (read_fd, &number, sizeof (number));
result = number*number;
// パイプラインにデータを書き込む
write (write_fd, &result, sizeof (result));
close (read_fd);
close (write_fd);
return EXIT_SUCCESS;
}
atmark@atde3:~/Desktop/work$ ./parent
3
3 x 3 = 9\natmark@atde3:~/Desktop/work$
システムプログラミング:環境変数表示(envp[]利用)
環境変数を標準出力に出力
#include
<stdio.h>
#include
<stdlib.h>
int
main(int argc,
char * argv[],char
*envp[]){
int i;
for(i = 0; envp[i] !=
NULL; i++){
printf("%s\n",
envp[i]);
}
return EXIT_SUCCESS;
}
atmark@atde3:~/Desktop/work$ gcc -o newenv newenv.c
atmark@atde3:~/Desktop/work$ ./newenv
atmark@atde3:~/Desktop/work$ gcc -o newenv newenv.c
atmark@atde3:~/Desktop/work$ ./newenv
システムプログラミング:簡単シェル(execl利用)
forkで子プロセスを生成し、そこでexeclを使ってコマンドを実行する。
#include <stdio.h>
#include <stdlib.h>
#include wait.h>
#include <unistd.h>
int main(){
char command[256],line[256];
int st;
static char prompt[64] = "> ";
fprintf(stderr,"%s",prompt);
while(fgets(line,sizeof(line),stdin) !=
NULL){
if(sscanf(line,"%s",command)
> 0){
if(fork() == 0){
if(execl(command,command,NULL)
< 0){
exit(EXIT_FAILURE);
}
}
else{
wait(&st);
}
}
fprintf(stderr,"%s",prompt);
}
return EXIT_SUCCESS;
}
atmark@atde3:~/work$
gcc -o nsh nsh.c
atmark@atde3:~/work$
./nsh
>
/bin/ls
lv lv.c
lv2 lv2.c nsh
nsh.c nsh.c~
2011年12月19日月曜日
システムプログラミング:タイマー(スレッド利用)
スレッドでタイマーを走らせる
#include<pthread.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int
main(int argc,
char *argv[]){
pthread_t
thread;
void *print_message(void
*args);
pthread_create(&thread,
NULL,
print_message, argv[1]);
pthread_join(thread,
NULL);
return EXIT_SUCCESS;
}
void
*print_message(void *args){
int dep_time;
dep_time = atoi(args)*60-5;
sleep(dep_time);
fprintf(stderr, "You have to leave in 5 secondes\n");
return NULL;
}
$ gcc -o lv2 -l pthread
lv2.c
$ ./lv2 1
2011年12月6日火曜日
日本e-learning学会 2011学術講演会レポート
こんにちはー。
またもや情報システムアドバンス科3年、関ちゃんです。
12月2日(水)日本e-learning学会2011学術講演会(産業技術大学院大学@東京)で、
「クラウドを利用した効果的な実習環境の構築」という題で研究発表を行ってきました。
その報告をば。
発表内容は、これまで学生PCや実習室に構築していた実習環境(開発用ソフトやサーバOS)を、クラウド上のVPSに構築しようという提案です。
今回は日本ラッド株式会社のご協力を頂き、共同開発したシステムを紹介しました。
これが普及すれば、実習環境構築や生徒管理の手間が激減するだけでなく、費用削減、遠隔利用などの効果があります。
簡単にいうとこんな感じ。
うん、内容はそれなりに頑張ってまとめたつもり。内容はね。
問題は発表ですよ。
他の発表者の方々、原稿もなしに指示棒持ってペラペラ語るよ、
超分かりやすいよ
私の前に発表した大学院生の人、すごい突っ込んだ質問されてるよ!
私のチキン★ハートが震えるぜ!!
ガクガク(((° Д °;)))ブルブル
うん、まぁ、どうしようもないので、用意した原稿棒読みしましたけどね。
膝と手が震えるのですごく読みづらかった。
発表時間の目安をオーバーしてましたが、
適当に削ってまとめるとかそんな器用なこと出来ない!
テンパったまま全部読みきりました。
完全に涙目です、ありがとうございました。
・・結構がんばって練習とかしてたんだけど、そう簡単に上手くは行かないもんですね。
おかげでそれほどキツイ質問は飛んで来なかったから結果オーライか。(どこが)
もうちょっと喋る訓練をしなきゃだめだなーと反省した次第でした。
精進します。
以上でレポートをおわります。
またもや情報システムアドバンス科3年、関ちゃんです。
12月2日(水)日本e-learning学会2011学術講演会(産業技術大学院大学@東京)で、
「クラウドを利用した効果的な実習環境の構築」という題で研究発表を行ってきました。
その報告をば。
発表内容は、これまで学生PCや実習室に構築していた実習環境(開発用ソフトやサーバOS)を、クラウド上のVPSに構築しようという提案です。
今回は日本ラッド株式会社のご協力を頂き、共同開発したシステムを紹介しました。
これが普及すれば、実習環境構築や生徒管理の手間が激減するだけでなく、費用削減、遠隔利用などの効果があります。
簡単にいうとこんな感じ。
うん、内容はそれなりに頑張ってまとめたつもり。内容はね。
問題は発表ですよ。
他の発表者の方々、原稿もなしに指示棒持ってペラペラ語るよ、
超分かりやすいよ
私の前に発表した大学院生の人、すごい突っ込んだ質問されてるよ!
私のチキン★ハートが震えるぜ!!
ガクガク(((° Д °;)))ブルブル
うん、まぁ、どうしようもないので、用意した原稿棒読みしましたけどね。
膝と手が震えるのですごく読みづらかった。
発表時間の目安をオーバーしてましたが、
適当に削ってまとめるとかそんな器用なこと出来ない!
テンパったまま全部読みきりました。
完全に涙目です、ありがとうございました。
・・結構がんばって練習とかしてたんだけど、そう簡単に上手くは行かないもんですね。
おかげでそれほどキツイ質問は飛んで来なかったから結果オーライか。(どこが)
もうちょっと喋る訓練をしなきゃだめだなーと反省した次第でした。
精進します。
以上でレポートをおわります。
AWS SDK for Javaを使うメモ
AWS SDK for Javaを使ってみました。
1.Eclipseの準備
ヘルプ->新規ソフトウェアのインストール->追加
ラベル名:Work with
ロケーション:http://aws.amazon.com/eclipse
AWS Toolkit for Eclipseを選択しインストールします。
2.AWSの設定
Eclipseを再起動し、AWSのアイコンができているのを確認します。
アイコンクリック->設定
ここで入力する情報はAWSにログインし、Security Credentials(セキュリティ証明書)から得られます。
http://aws.amazon.com/security-credentials
設定がされるとexploreに情報がでてきます。
3.サンプルを実行まで
http://aws.amazon.com/jp/sdkforjava/ よりSDKをダウンロード
デスクトップに解凍し、中身を見てみます。Sampleがあるのでそれを利用します。
新規->AWS Java Project->
プロジェクト名:AmazonS3
Amazon S3 Sampleにチェック
アカウントも選択します。
あとはJava Applicationを実行してみます。
1.Eclipseの準備
ヘルプ->新規ソフトウェアのインストール->追加
ラベル名:Work with
ロケーション:http://aws.amazon.com/eclipse
AWS Toolkit for Eclipseを選択しインストールします。
2.AWSの設定
Eclipseを再起動し、AWSのアイコンができているのを確認します。
アイコンクリック->設定
ここで入力する情報はAWSにログインし、Security Credentials(セキュリティ証明書)から得られます。
http://aws.amazon.com/security-credentials
設定がされるとexploreに情報がでてきます。
3.サンプルを実行まで
http://aws.amazon.com/jp/sdkforjava/ よりSDKをダウンロード
デスクトップに解凍し、中身を見てみます。Sampleがあるのでそれを利用します。
新規->AWS Java Project->
プロジェクト名:AmazonS3
Amazon S3 Sampleにチェック
アカウントも選択します。
あとはJava Applicationを実行してみます。
登録:
投稿 (Atom)