クリップボードカット&ペースト

Download Report

Transcript クリップボードカット&ペースト

クリップボードカット&ペースト
クリップボードカット&ペースト






クリップボードカット&ペースト
クリップボードカット&ペーストの操作
mcut - クリップボードカット
mpaste - クリップボードペースト
medit - クリップボード編集
medit - クリップボード編集の操作
クリップボードカット&ペースト
クリップボードカット&ペースト
mcut
mpaste
標準入力から入
力されたデータ
を共有メモリに
入れる
共有メモリか
らデータを取
出しプリントす
る
write
read
print
共有
メモリ
クリップボードカット&ペースト
クリップボードカット&ペーストの操作
クリップボードカット&ペースト
mcut - クリップボードカット
mcut.c
4096バイト、読書き可能
int main() {
な共有メモリを作成
char *head;
char in_data[4096], *in_ptr;
char *pos;
ファイル名と1文字
int i, in_tmp, shmid;
からキーを作る
key_t shmkey;
shmkey = ftok("mcut",'a');
shmid = shmget(shmkey,sizeof(in_data),IPC_CREAT|0666);
head = pos = shmat(shmid,0,0);
in_ptr = in_data;
mcut
mpaste
write
共有メモリの先頭
for (i=0; i<sizeof(in_data)-1; i++) {
アドレスを得る
if ((in_tmp=getchar()) == EOF) {
break;
}
標準入力からの文
*in_ptr = In_tmp;
字をin_dataへ
in_ptr++;
}
共有メモリ
*in_ptr = (char)NULL;
に書込む
in_ptr = in_data;
strncpy(pos,in_ptr,sizeof(in_data));
shmdt(head);
共有メモリの
return EXIT_SUCCESS;
}
利用を止める
read
print
共有
メモリ
クリップボードカット&ペースト
mpaste - クリップボードペースト
mpaste.c
mcut
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
ファイル名と1文字
int main() {
からキーを作る
char *head;
char out_data[4096], *out_ptr;
char *pos;
int shmid;
key_t shmkey;
shmkey = ftok("mcut",'a');
shmid = shmget(shmkey,sizeof(out_data),IPC_CREAT|0666);
head = pos = shmat(shmid,0,0);
共有メモリの先頭
out_ptr = out_data;
アドレスを得る
strncpy(out_ptr,pos,sizeof(out_data));
printf("%s",out_data);
fflush(stdout);
共有メモリか
return EXIT_SUCCESS;
}
ら読み出す
mpaste
write
read
print
共有
メモリ
クリップボードカット&ペースト
medit - クリップボード編集


mcutによって共有メモリに書き込まれたデータを編集(例えば、全て大文字
に変換(関数toupper()を使用)する)プログラム(medit.c)を作成する。
共有メモリに書き込まれたデータが、実際に、全て大文字になっていること
をmpasteで確認する。
mcut
medit
mpaste
write
read
toupper
共有
メモリ
write
read
print
クリップボードカット&ペースト
medit - クリップボード編集の操作
$w
7:43pm up 7:51, 2 users, load average: 0.00, 0.00, 0.00
USER
TTY
FROM
LOGIN@ IDLE JCPU PCPU WHAT
oida
pts/0 pupa
12:34pm 10:53 0.05s 0.05s -bash
oida
pts/1 pupa
7:25pm 0.00s 0.08s 0.01s w
$ gcc -o hw6 hw6.c
$ w | ./mcut
$ ./medit
$ ./mpaste
7:43PM UP 7:52, 2 USERS, LOAD AVERAGE: 0.00, 0.00, 0.00
USER
TTY
FROM
LOGIN@ IDLE JCPU PCPU WHAT
OIDA
PTS/0 PUPA
12:34PM 10:32 0.05S 0.05S -BASH
OIDA
PTS/1 PUPA
7:25PM 0.00S 0.07S 0.00S W
$
大文字に
なっている