2013-04-19 8 views
0

Я изучаю пример из книги драйвера устройства Linux (http://lwn.net/Kernel/LDD3/), и я не понимаю использования и полезности функции memset в этом контексте, и я надеялся, что кто-то может объяснить это мне. Я понимаю, что мы выделяем память для нашей структуры устройства, используя kmalloc, а с memset мы помещаем 0 в адрес памяти? Вот пример nonortheless:Понимание использования memset в этом примере

int scull_p_init(dev_t firstdev) 
{ 
int i, result; 

result = register_chrdev_region(firstdev, scull_p_nr_devs, "scullp"); 
if (result < 0) { 
    printk(KERN_NOTICE "Unable to get scullp region, error %d\n", result); 
    return 0; 
} 
scull_p_devno = firstdev; 
scull_p_devices = kmalloc(scull_p_nr_devs * sizeof(struct scull_pipe), GFP_KERNEL); 
if (scull_p_devices == NULL) { 
    unregister_chrdev_region(firstdev, scull_p_nr_devs); 
    return 0; 
} 
memset(scull_p_devices, 0, scull_p_nr_devs * sizeof(struct scull_pipe)); 
for (i = 0; i < scull_p_nr_devs; i++) { 
    init_waitqueue_head(&(scull_p_devices[i].inq)); 
    init_waitqueue_head(&(scull_p_devices[i].outq)); 
    init_MUTEX(&scull_p_devices[i].sem); 
    scull_p_setup_cdev(scull_p_devices + i, i); 
} 

ответ

1

MemSet не ставит 0 перед scull_p_devices. Это переписывает память с адреса в scull_p_devices до размера выделенной области с нулями.