BeagleBone
mmap †
- 参考
- 機能:ファイルとメモリの同一視(仮想メモリ技術)
- 読み込み専用なら,メモリから読み出しがそのままファイル読み出しに相当.
- 書き込み専用なら,メモリへの書き込みがそのままファイル書き込みに相当.
- メリット
- カーネルとコピープログラムの間でデータのコピーが発生しないので,高速.
void*のoffset †
#include <stdio.h>
int main(void)
{
void* a = (char*)0x01;
a = (void*)((char*)a + 0x0F);
printf("%p\n", a);
}
inputデバイスに入出力 †
- Input Subsystem
- キーボード・マウス・ジョイスティックなどからの入力を受け取る
- キーボード・マウス・ジョイスティックが動いたと,システムに錯覚させる
- 仮想キーボード・マウス・ジョイスティックを作る
入力 †
#include <stdio.h>
#include <stdlib.h>
#include <linux/input.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <errno.h>
int main(void)
{
// int fd = open("/dev/input/event0", O_RDONLY); // blocking
int fd = open("/dev/input/event0", O_NONBLOCK); // non-blocking
while (1) {
// Read
struct input_event event;
int a = read(fd, &event, sizeof(event));
if (a < 0 && errno == EAGAIN) {
// No Input
} else if (a < 0) {
fprintf(stderr, "read error\n");
return 1;
} else {
// Refer
if (event.type == EV_KEY) // EV_KEY: Keyboard, EV_REL: Mouse movement, EV_ABS: joystick/touch panel
if (event.value == 1) // 1: pushed, 0: released, 2: machinegun
printf("%d pushed\n", event.code); // code: info to detect!
}
}
}
日付からUNIX TIMEを得る †
#include <ctime>
#include <cstdio>
#include <cmath>
int main(void)
{
int y = 2015;
int m = 5;
struct tm t;
time_t timer;
timer = mktime(&t);
for (int d = 3; d < 30; d++) {
t.tm_year = y - 1900;
t.tm_mon = m - 1;
t.tm_mday = d;
t.tm_hour = t.tm_min = t.tm_sec = 0;
timer = mktime(&t);
printf("%d %d (%ld)\n", d, (int)round((double)timer/60/60/24), timer);
}
}