📄 prg13_4shmwr.c
字号:
#include <sys/types.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <sys/mman.h>
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
int main(int argc,char **argv)
{
int c,fd,flags;
unsigned char *ptr,*rptr;
off_t length;
struct stat wstat;
flags = O_RDWR | O_CREAT;
int i;
if (argc != 3)
{
printf("usage %s: <name> <length>",argv[0]);
exit(0);
}
while((c = getopt(argc,argv,"e")) !=-1)
{
switch(c)
{
case 'e':
flags |= O_EXCL;
break;
}
}
length = atoi(argv[2]);
fd = shm_open(argv[1],flags,FILE_MODE);
ftruncate(fd,length);
fstat(fd,&wstat); //获取大小信息
ptr = mmap(NULL,length,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);
close(fd);
if (wstat.st_size > 0)
printf("already created and now writing\n");
for(i=0;i<wstat.st_size;i++)
{
*ptr++ = i%256;
printf("%d",*(ptr-1));
}
printf("\n");
fd = shm_open(argv[1],O_RDONLY,FILE_MODE);
fstat(fd,&wstat);
rptr = mmap(NULL,wstat.st_size,PROT_READ,MAP_SHARED,fd,0);
close(fd);
if (wstat.st_size >0)
printf("now reading\n");
for(i=0; i<wstat.st_size;i++)
{
if ((c=*rptr++) != (i % 256))
printf("not equal rptr[%d] = %d",i,c);
else
printf("%d",c);
}
printf("\n");
shm_unlink(argv[1]);
exit(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -