window.location.href содержит текущий URL. Можно читать из него, можно добавить к нему, и можно заменить его, который может вызвать перезагрузку страницы.
, Если, как это походит, Вы хотите записать состояние JavaScript в URL, таким образом, это может быть отмечено, не перезагружая страницу, добавьте его к текущему URL после # и имейте часть JavaScript, инициированного onload синтаксическим анализом события текущий URL, чтобы видеть, содержит ли это сохраненное состояние.
, Если Вы используете a? вместо # Вы вызовете перезагрузку страницы, но так как Вы проанализируете сохраненное состояние на загрузке, это не может на самом деле быть проблемой; и это сделает вперед, и кнопки "Назад" работают правильно также.
Используйте open ()
в правом файле в / dev
(например, / dev / fb0
), затем используйте mmap ()
, чтобы отобразить его в памяти. Страницы управления помогут выполнить эти системные вызовы, если вы не знаете, как их использовать.
Кроме того, есть некоторые структуры и константы для некоторых ioctl ()
s в
. Как и многие заголовки ядра, вы можете многому научиться, просто просматривая файл.
Особенно интересен ioctl FBIOGET_VSCREENINFO
с struct fb_var_screeninfo
. Обратите внимание, что это имеет xres
, yres
(разрешение) и битов на_пиксель
. Затем есть FBIOGET_FSCREENINFO
и struct fb_fix_screeninfo
, которые содержат дополнительную информацию, такую как type
и line_length
.
Итак, пиксель в (x, y) может быть на mmap_base_address + x * bits_per_pixel / 8 + y * line_length
. Точный формат пикселей будет зависеть от структур, которые вы извлекаете с помощью ioctl; это ваша задача - решить, как их читать / записывать.
Я давно не работал с этим, поэтому я немного не уверен в деталях ..
Вот быстрый и грязный пример кода, просто чтобы проиллюстрируйте, как это делается ... Я это не тестировал.
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <linux/fb.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
int main()
{
struct fb_var_screeninfo screen_info;
struct fb_fix_screeninfo fixed_info;
char *buffer = NULL;
size_t buflen;
int fd = -1;
int r = 1;
fd = open("/dev/fb0", O_RDWR);
if (fd >= 0)
{
if (!ioctl(fd, FBIOGET_VSCREENINFO, &screen_info) &&
!ioctl(fd, FBIOGET_FSCREENINFO, &fixed_info))
{
buflen = screen_info.yres_virtual * fixed_info.line_length;
buffer = mmap(NULL,
buflen,
PROT_READ|PROT_WRITE,
MAP_SHARED,
fd,
0);
if (buffer != MAP_FAILED)
{
/*
* TODO: something interesting here.
* "buffer" now points to screen pixels.
* Each individual pixel might be at:
* buffer + x * screen_info.bits_per_pixel/8
* + y * fixed_info.line_length
* Then you can write pixels at locations such as that.
*/
r = 0; /* Indicate success */
}
else
{
perror("mmap");
}
}
else
{
perror("ioctl");
}
}
else
{
perror("open");
}
/*
* Clean up
*/
if (buffer && buffer != MAP_FAILED)
munmap(buffer, buflen);
if (fd >= 0)
close(fd);
return r;
}
В качестве альтернативы ответу асвейкау вы можете использовать DirectFB , что может значительно упростить вам задачу.