内存操作小结

  在写程序时,时常遇到各种各样的内存操作,我把遇到的都记录下来,方便以后的操作。遇到新的方法就加上去。

1) strcpy

原型声明:extern char *strcpy(char* dest, const char *src);

头文件:#include <string.h>

功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间

说明:srcdest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

返回指向dest的指针。

struct v4l2_capability *cap;
memset(cap, 0, sizeof *cap);   清0
strcpy(cap->driver, "myuvc");  赋值

2) memcpy

原型:void *memcpy(void *dest, const void *src, size_t n);

char *s="Golden Global View";
char d[20];
clrscr();
memcpy(d,s,( strlen(s)+1) );
printf("%s",d);
getchar();
输出结果:Golden Global View

3) mmap

 mmap系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。

void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);

  fd为即将映射到进程空间的文件描述字,一般由open()返回;

  len是映射到调用进程地址空间的字节数,它从被映射文件开头offset个字节开始算起。

  prot参数指定共享内存的访问权限。可取如下几个值的或:PROT_READ(可读),PROT_WRITE(可写),PROT_EXEC(可执行),PROT_NONE(不可访问)。

  flags由以下几个常值指定:MAP_SHARED, MAP_PRIVATE, MAP_FIXED。其中,MAP_SHARED,MAP_PRIVATE必选其一,而MAP_FIXED则不推荐使用。 

struct stat st; 
char buffer=” inforindex”; 
Fileinformation *_fileinfoIndexptr = NULL; 
if(stat(buffer,&st)<0) 
{ 
        fprintf(stderr,"error to stat %s\n",buffer); 
        exit(-1); 
}

// mmap the inforindex to _fileinfoIndexptr 
int fd=open(buffer, O_RDONLY); 
if(fd<0) 
{ 
        printf("error to open %s\n",buffer); 
        exit(-1); 
} 
_fileinfoIndexptr    = (Fileinformation*)mmap(NULL,st.st_size, PROT_READ,MAP_SHARED,fd,0);

if(MAP_FAILED == _fileinfoIndexptr) 
{ 
        printf("error to mmap %s\n",buffer); 
close(fd); 
        exit(-1); 
} 
close(fd);















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值