当前位置:  技术问答>linux和unix

关于在linux下驱动全局变量赋值问题!!!

    来源: 互联网  发布时间:2016-11-15

    本文导语:  我在linux下编了一个fifo模块驱动,定义全局变量 struct fifo {   struct cdev dev;    char buff[MAX_BUF];     int len;   struct semaphore sem;    wait_queue_head_t wq,rq; }; 然后给在read函数里给定义的全局变量fifo的成员buff赋值...

我在linux下编了一个fifo模块驱动,定义全局变量
struct fifo

{
  struct cdev dev;
   char buff[MAX_BUF];
    int len;
  struct semaphore sem;
   wait_queue_head_t wq,rq;
};
然后给在read函数里给定义的全局变量fifo的成员buff赋值,用fifo->buff = "asdfddg";
它报错incompatible types in assignment;可是memcpy(fifo->buff, "asdfasf", 8);他就对,为什么??
附程序:
#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 



MODULE_LICENSE("GPL");



#define DEV_CNT 2

#define MAX_BUF 1024



char *modname="mm";



struct fifo

{

    struct cdev dev;

    char buff[MAX_BUF];

    int len;

    struct semaphore sem;

    wait_queue_head_t wq,rq;

};

struct fifo *fifo;

struct file_operations ops={0},ops1={},ops0={};

dev_t devid;

struct class *cls;



int mm_open (struct inode *inode, struct file *file)

{

    int minor=iminor(inode);



    if(minor==0)

        file->f_op=&ops0;

    else

        file->f_op=&ops1;



    return 0;

}



ssize_t mm_read0(struct file *file, char __user *buff, size_t size, loff_t *off)

{

    int count=size;

//fifo->buff = "asdfddg";   

memcpy(fifo->buff, "asdfasf", 8);  //就是这个地方

fifo->len = 8;

   // DECLARE_WAITQUEUE(wait,current);

    

   // add_wait_queue(&fifo->rq,&wait);

    down_interruptible(&fifo->sem);

    

    while(fifo->len==0)

    {

        //set_current_state(TASK_INTERRUPTIBLE);

        up(&fifo->sem);

    wait_event_interruptible(fifo->rq,0);

       // schedule();



        if(signal_pending(current))

        {

           // remove_wait_queue(&fifo->rq,&wait);

            return -ERESTARTSYS;

        }

        down_interruptible(&fifo->sem);

    }



    if(count>fifo->len)

        count=fifo->len;



    if(copy_to_user(buff,fifo->buff,count))

    {

        printk("copy_to_user failedn");

        up(&fifo->sem);

        //remove_wait_queue(&fifo->rq,&wait);

        return -EPERM;

    }

    else

    {

        memcpy(fifo->buff,fifo->buff+count,fifo->len-count);

        fifo->len-=count;

    }



    wake_up(&fifo->wq);

    

    //remove_wait_queue(&fifo->rq,&wait);

    up(&fifo->sem);

    return count;

}

|
struct fifo

{
  struct cdev dev;
  char buff[MAX_BUF];
  int len;
  struct semaphore sem;
  wait_queue_head_t wq,rq;
};
然后给在read函数里给定义的全局变量fifo的成员buff赋值,用fifo->buff = "asdfddg";

你的buff如果定义成char ×就对了,原因是数组名还是不一样的,数组名是指向了某块内存区域的指针, (内存区域[MAX_BUF]),不能再将数组名指向别的内存区域。本例中“adfsdaf”是放在常量区域的内存,即
char * pc1 = "a";
char * pc2 = "a";
此时pc1 和pc2的值是一样的,即指向了同一块地址。希望能帮到你。

|

struct fifo

{
  struct cdev dev;
  char buff[MAX_BUF];
  int len;
  struct semaphore sem;
  wait_queue_head_t wq,rq;
};
然后给在read函数里给定义的全局变量fifo的成员buff赋值,用fifo->buff = "asdfddg";
/* Wenxy comment: 请打好C主言基础, char buff[MAX_BUF] = "asdfddg"; 就是C++也需要重载=运算符才能这样赋值 */
它报错incompatible types in assignment;可是memcpy(fifo->buff, "asdfasf", 8);他就对,为什么??/* Wenxy comment: 这样做才对 */

|
you are a genius, you cannot assign a char * to char x[], you know that. please read more basic books about c

    
 
 

您可能感兴趣的文章:

  • Linux中结构体赋值时“.”是什么语法
  • 在Linux下,如何将输出到屏幕的数据赋值给一个C语言程序里的变量
  • 问两个linux shell变量赋值的问题:(1)通过输出结果(2)从文件中读取 谢谢!
  • 看linux0.12内核遇到个很奇怪的赋值,求教用意.
  • linux中大量的全局变量怎么体现结构化的程序设计?
  • linux动态链接库里全局变量和静态变量会导致动态库不可重入吗?
  • linux内核全局变量定义问题!
  • 建一个linux共享库(.so.x.x文件)里边包含类、全局变量,结构体等
  • 初学linux,请问如何把我的路径加到全局的路径里面去?要改哪个配置文件?
  • linux内核怎么定义汇编全局变量及在c文件中使用这个变量?有关0。11下的字符回显
  • 高手们,请问我在linux中装了jdk,但现在不知道该如何设置全局path啊!!!!!!!!
  • linux下,在调用main()函数之前怎样得到命令行参数argc和argv??『比如在main()前面构造全局对象时』
  • linux 多线程 问题 全局变量 共享问题,恳请赐教,帮助>>
  • linux下如何安全地让三个不同线程处理一个全局的链表
  • 关于Linux下多线程情况下全局变量保护的问题,求个解决方案
  • 内核模块,使用全局变量current, 包含#include <linux/kernel.h>编译出错?
  • Linux 中字符数组作为全局变量的纠结问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux下如何查看,设置环境变量并立即生效
  • 程序中获取的环境变量能够根据Linux系统中相应环境变量而变化吗?
  • linux 下设置环境变量 使用了setenv 和putenv 在程序结束以后 发现变量又变回去了
  • Linux能否自定义系统变量一如windows里的系统环境变量可以"新建"一样
  • [linux shell] 如何获得以一个变量的值为名的变量的值
  • linux 下环境变量如何设呀!
  • Linux 将自带的jdk设置成环境变量
  • Linux下环境变量问题以及FLEX安装问题
  • 在LINUX下安装SYBASE 需添加环境变量问题(在线等待)
  • 在Linux Shell scripts下变量如何取linux的命令运行值
  • 我想问个关于Linux系统下Sybase环境变量的问题
  • linux下到底如何设置环境变量?在哪设置?详细具体点
  • linux 如何在两个.c文件中引用对方的变量。
  • linux~shell~如何取变量的值并在后面添加字符?
  • linux下,如何修改环境变量?
  • 请教:linux平台(redhat7.2)下的环境变量在哪里设置?
  • 在linux下,如何查询系统的预定义变量?
  • ACE 如何在linux下设置环境变量
  • Linux 如何让环境变量长久有效
  • linux在哪里设置jdk的环境变量?
  • sqlserver iis7站长之家
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3