内存操作小结

来源:互联网 发布:嵌入式软件开发团队 编辑:程序博客网 时间:2024/06/06 21:38

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

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);   清0strcpy(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);















0 0
原创粉丝点击