LINUX.ORG.RU
ФорумTalks

/dev/one


0

0

Вот есть устройство /dev/zero, читая которое получаешь замечательные нолики.. но нифига нету /dev/one или чего-то вроде того, откуда перли бы единицы. Я тут подумываю в целях практики попробовать написать такой драйвер, который создал бы такое устройство. Проблема в том, что я чего-то боюсь это делать.. Тут ведь и доиграццо недолго. Сами смотрите, у меня ничего не было, а тут какие-то единицы прут, т.е. информация берется из ниоткуда. А вдруг я в этом случае нарушу какой-нибудь фундаментальный закон природы и наша Вселенная разрушится? Кто-нибудь знает, чем грозит нашему миру создание /dev/one?


Не ссы: Боб Марли сказал, что всё будет хорошо - значит всё будет хорошо!

unnamed
()

/dev/one не страшно /dev/ass страшнее уж если из него попрет... а кстати тема /dev/ass выдающее shitshitshitshitshitshitshitshitshitshit . Законы природы будут соблюдены.

iBliss
()
Ответ на: комментарий от iBliss

Или /dev/сunt для затирки жестких дисков. Фраза "Жесткий диск накрылся 3.143дой" приобретет весьма культурный смысл

iBliss
()
Ответ на: комментарий от iBliss

в /dev/null отправляют, а /dev/blackhole cам заберёт >)

timth ★☆
()
Ответ на: комментарий от iBliss

>Ну это устройство ввода и его проще симлинкнуть с /dev/null.

А теперь представь,.. Устройство ввода /dev/blackhole симлинкнуть на свою ипостась на вводе - /dev/null... В итоге получается нечто первозданное..

MiracleMan ★★★★★
()
Ответ на: комментарий от MiracleMan

> В итоге получается нечто первозданное..

Которое начнет расширится пожирая весь диск со скоростью света превысив скорость шины 8O... (у меня где-то еще пол-коробка оставалось....)

iBliss
()

луче ещё поучись сперва. Зачем драйвер если единицы можно лехко получить инкрементом получаемово из /dev/zero?

bugmaker ★★★★☆
()
Ответ на: комментарий от timth

/dev/mantrid_hand %)
эxxexexe тeмнaя зoнa дeйcтвитeльнo зacлyживaeт тaкoй лaпы ))))

anonymous
()

это фигня.. страшное случится если /dev/random заменить на /dev/zero - вот тогда случится что-то страшное, типа тепловой смерти наверное. И винде тоже будет капец.

WerNA ★★★★★
()
Ответ на: комментарий от UserUnknown

>yes 1
Не катит, нужны не строки, а символы.

anonymous
()

блин напиши да проверь, делов то :-/
там всего кода под 2.6 ровно на сто строк

--- module.c ---
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/string.h>
#include <linux/vermagic.h>
#include <asm/uaccess.h>

static ssize_t devone_read(struct file *file, char __user *data,
    size_t len, loff_t *off);

static size_t devone_buflen = PAGE_SIZE;
static void *devone_buffer;
static int devone_fill = 1;
static struct class_simple *devone_class;
static dev_t devone_dev;
static struct cdev *devone_cdev;
static struct file_operations devone_fop = {
        .read = devone_read
};

static int __init
devone_init_module(void)
{
    struct class_device *cd;
    int err;

    devone_class = class_simple_create(THIS_MODULE, "devone");
    if (IS_ERR(devone_class)) {
        err = PTR_ERR(devone_class);
    } else {
        err = alloc_chrdev_region(&devone_dev, 0, 1, "devone");
        if (!err) {
            devone_cdev = cdev_alloc();
            if (!devone_cdev) {
                err = -ENOMEM;
            } else {
                cdev_init(devone_cdev, &devone_fop);
                devone_cdev->owner = THIS_MODULE;
                err = cdev_add(devone_cdev, devone_dev, 1);
                if (!err) {
                    cd = class_simple_device_add(devone_class,
                        devone_dev, 0, "%s", "one");
                    if (IS_ERR(cd)) {
                        err = PTR_ERR(cd);
                    } else {
                        devone_buffer = kmalloc(devone_buflen, GFP_KERNEL);
                        if (!devone_buffer) {
                            err = -ENOMEM;
                        } else {
                            memset(devone_buffer, devone_fill, devone_buflen);
                            return 0;
                        }
                    }
                    cdev_del(devone_cdev);
                }
                kfree(devone_cdev);
            }
            unregister_chrdev_region(devone_dev, 1);
        }
        class_simple_destroy(devone_class);
    }

    printk("Failed to init module (error %d)\n", err);

    return err;
}

static void __exit
devone_exit_module(void)
{
    class_simple_device_remove(devone_dev);
    cdev_del(devone_cdev);
    kfree(devone_cdev);
    unregister_chrdev_region(devone_dev, 1);
    class_simple_destroy(devone_class);
}

static ssize_t
devone_read(struct file *file, char __user *data,
    size_t len, loff_t *off)
{
    if (!len) return 0;
    if (len > devone_buflen) len = devone_buflen;
    if (copy_to_user(data, devone_buffer, len)) {
        return -EFAULT;
    }
    *off += len;

    return len;
}

MODULE_INFO(vermagic, VERMAGIC_STRING);
MODULE_DESCRIPTION("Sample /dev/one device");
MODULE_AUTHOR("none");
MODULE_LICENSE("GPL");

module_init(devone_init_module);
module_exit(devone_exit_module);
--- module.c ---

--- Makefile ---
KERNELRELEASE ?= $(shell uname -r)
KERNELDIR ?= /lib/modules/$(KERNELRELEASE)/build
MODULEDIR := $(PWD)

MODNAME = devone

obj-m := $(MODNAME).o
$(MODNAME)-objs := module.o

all :
    $(MAKE) -C $(KERNELDIR) M=$(MODULEDIR) modules

clean :
    $(MAKE) -C $(KERNELDIR) M=$(MODULEDIR)clean

load :
    insmod $(MODNAME).ko

unload :
    rmmod $(MODNAME)
--- Makefile ---

// wbr

klalafuda ★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.