亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 3029 | 回復(fù): 11
打印 上一主題 下一主題

關(guān)于指針的問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-03-21 22:00 |只看該作者 |倒序瀏覽
我在閱讀一個簡單的驅(qū)動代碼時,有一個地方看不懂,在程序的開頭定義了一個結(jié)構(gòu)體類型的指針struct mem_dev *mem_devp,可在程序中卻出現(xiàn)了memdevp,i取0和1,這在程序中有定義,mem_dev【i】算是指針數(shù)組嗎,如果是,怎么沒在程序的開頭定義呢,再說指針數(shù)組在這里又起什么用呢?程序代碼如下:(紅色字體是我不懂的地方)
#include <linux/module.h>
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/mm.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <linux/cdev.h>
#include <asm/io.h>
#include <asm/system.h>
#include <asm/uaccess.h>

#include "memdev.h"

static mem_major = MEMDEV_MAJOR;

module_param(mem_major, int, S_IRUGO);

struct mem_dev *mem_devp; /*設(shè)備結(jié)構(gòu)體指針*/

struct cdev cdev;

/*設(shè)備驅(qū)動模塊加載函數(shù)*/
static int memdev_init(void)
{
  int result;
  int i;

  dev_t devno = MKDEV(mem_major, 0);

  /* 靜態(tài)申請設(shè)備號*/
  if (mem_major)
    result = register_chrdev_region(devno, 2, "memdev");
  else  /* 動態(tài)分配設(shè)備號 */
  {
    result = alloc_chrdev_region(&devno, 0, 2, "memdev");
    mem_major = MAJOR(devno);
  }  
  
  if (result < 0)
    return result;

  /*初始化cdev結(jié)構(gòu)*/
  cdev_init(&cdev, &mem_fops);
  cdev.owner = THIS_MODULE;
  cdev.ops = &mem_fops;
  
  /* 注冊字符設(shè)備 */
  cdev_add(&cdev, MKDEV(mem_major, 0), MEMDEV_NR_DEVS);
   
  /* 為設(shè)備描述結(jié)構(gòu)分配內(nèi)存*/
  mem_devp = kmalloc(MEMDEV_NR_DEVS * sizeof(struct mem_dev), GFP_KERNEL);
  if (!mem_devp)    /*申請失敗*/
  {
    result =  - ENOMEM;
    goto fail_malloc;
  }
  memset(mem_devp, 0, sizeof(struct mem_dev));
  
  /*為設(shè)備分配內(nèi)存*/
  for (i=0; i < MEMDEV_NR_DEVS; i++)
  {
        mem_devp.size = MEMDEV_SIZE;
        mem_devp.data = kmalloc(MEMDEV_SIZE, GFP_KERNEL);
        memset(mem_devp.data, 0, MEMDEV_SIZE);
  }
   
  return 0;

  fail_malloc:
  unregister_chrdev_region(devno, 1);
  
  return result;
}

/*模塊卸載函數(shù)*/
static void memdev_exit(void)
{
  cdev_del(&cdev);   /*注銷設(shè)備*/
  kfree(mem_devp);     /*釋放設(shè)備結(jié)構(gòu)體內(nèi)存*/
  unregister_chrdev_region(MKDEV(mem_major, 0), 2); /*釋放設(shè)備號*/
}

MODULE_AUTHOR("David Xie");
MODULE_LICENSE("GPL");

module_init(memdev_init);
module_exit(memdev_exit);

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
2 [報告]
發(fā)表于 2011-03-21 22:24 |只看該作者
我在閱讀一個簡單的驅(qū)動代碼時,有一個地方看不懂,在程序的開頭定義了一個結(jié)構(gòu)體類型的指針struct mem_dev ...
cjj888 發(fā)表于 2011-03-21 22:00



    mem_dev是什么結(jié)構(gòu)來的?

論壇徽章:
0
3 [報告]
發(fā)表于 2011-03-21 22:38 |只看該作者
以下是mem_dev結(jié)構(gòu)體的定義
#ifndef _MEMDEV_H_
#define _MEMDEV_H_

#ifndef MEMDEV_MAJOR
#define MEMDEV_MAJOR 254   /*預(yù)設(shè)的mem的主設(shè)備號*/
#endif

#ifndef MEMDEV_NR_DEVS
#define MEMDEV_NR_DEVS 2    /*設(shè)備數(shù)*/
#endif

#ifndef MEMDEV_SIZE
#define MEMDEV_SIZE 4096
#endif

/*mem設(shè)備描述結(jié)構(gòu)體*/
struct mem_dev                                    
{                                                        
  char *data;                     
  unsigned long size;      
};

#endif /* _MEMDEV_H_ */

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
4 [報告]
發(fā)表于 2011-03-21 22:48 |只看該作者
很奇怪,一個指針也可以這樣子訪問它的元素。

論壇徽章:
0
5 [報告]
發(fā)表于 2011-03-22 01:17 |只看該作者
/*為設(shè)備分配內(nèi)存*/
  for (i=0; i < MEMDEV_NR_DEVS; i++)
  {
        mem_devp.size = MEMDEV_SIZE;
        mem_devp.data = kmalloc(MEMDEV_SIZE, GFP_KERNEL);
        memset(mem_devp.data, 0, MEMDEV_SIZE);
  }
該是
mem_devp[i].size = ...
mem_devp[i].data = ..
這樣吧

論壇徽章:
0
6 [報告]
發(fā)表于 2011-03-22 08:54 |只看該作者
/*為設(shè)備分配內(nèi)存*/
  for (i=0; i < MEMDEV_NR_DEVS; i++)
  {
        mem_devp.size = MEMDEV_SIZE;
        mem_devp.data = kmalloc(MEMDEV_SIZE, GFP_KERNEL);
        memset(mem_devp.data, 0, MEMDEV_SIZE);
  }
該是
mem_devp.size = ...
mem_devp.data = ..
這樣吧

是的就是mem_devp.size,那它為什么沒在程序的開頭定義mem_devp,而只是定義mem_devp呢

論壇徽章:
2
程序設(shè)計版塊每日發(fā)帖之星
日期:2015-06-17 22:20:00每日論壇發(fā)貼之星
日期:2015-06-17 22:20:00
7 [報告]
發(fā)表于 2011-03-22 09:20 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽

論壇徽章:
0
8 [報告]
發(fā)表于 2011-03-22 09:42 |只看該作者
我把問題重說一下,在程序的開頭定義了一個結(jié)構(gòu)體類型的指針struct mem_dev *mem_devp,可在程序中卻出現(xiàn)了memdevp【i】(i取0和1,這在程序中有定義),mem_dev【i】算是指針數(shù)組嗎,如果是,怎么沒在程序的開頭定義呢,再說指針數(shù)組在這里又起什么用呢?

論壇徽章:
2
程序設(shè)計版塊每日發(fā)帖之星
日期:2015-06-17 22:20:00每日論壇發(fā)貼之星
日期:2015-06-17 22:20:00
9 [報告]
發(fā)表于 2011-03-22 10:27 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽

論壇徽章:
0
10 [報告]
發(fā)表于 2011-03-22 11:23 |只看該作者
恩,有了
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP