在写程序时,时常遇到各种各样的内存操作,我把遇到的都记录下来,方便以后的操作。遇到新的方法就加上去。
1) strcpy
原型声明:extern char *strcpy(char* dest, const char *src);
头文件:#include <string.h>
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且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);