Linux系统目录/dev/shm

Linux文件系统中有一目录为:/dev/shm,其中dev为device(设备)的缩写,shm为shared memory。
可以把/dev/shm看作是系统内存的入口, 可以把它看做是一块物理存储设备,该目录映射的不是磁盘,而是内存。
挂载在/dev/shm上的文件系统为tmpfs,temp file system,临时文件系统之意。
linux下/dev/shm的容量默认最大为内存的一半大小。但它并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是0字节。
ORACLE的memory_target就利用了/dev/shm。与其相关的典型错误为ORA-00805。

——整理自网络

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29067253/viewspace-2144549/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29067253/viewspace-2144549/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下步骤将/dev/ttyUSB0的数据放到共享内存中: 1. 打开/dev/ttyUSB0设备,并设置其属性,例如波特率、数据位、停止位等等。 2. 创建共享内存,通过shmget函数可以创建共享内存,指定共享内存的大小。 3. 通过shmat函数将共享内存映射到进程的地址空间中。 4. 通过read函数从/dev/ttyUSB0设备中读取数据,并将数据写入共享内存中。 5. 通过shmdt函数将共享内存与进程的地址空间分离。 下面是一个简单的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <termios.h> #define SHM_SIZE 4096 int main() { int fd = -1; int shmid = -1; char *shmaddr = NULL; struct termios options; // 打开/dev/ttyUSB0设备,并设置属性 fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd < 0) { perror("open ttyUSB0 error"); exit(EXIT_FAILURE); } tcgetattr(fd, &options); // 获取当前设置 options.c_cflag |= (CLOCAL | CREAD); options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; options.c_cflag &= ~PARENB; options.c_iflag &= ~(IXON | IXOFF | IXANY); options.c_oflag &= ~OPOST; options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); options.c_cc[VTIME] = 0; options.c_cc[VMIN] = 1; cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); tcsetattr(fd, TCSANOW, &options); // 设置属性 // 创建共享内存 shmid = shmget(IPC_PRIVATE, SHM_SIZE, IPC_CREAT | 0666); if (shmid < 0) { perror("shmget error"); exit(EXIT_FAILURE); } // 映射共享内存到进程地址空间 shmaddr = shmat(shmid, NULL, 0); if (shmaddr == (void *)-1) { perror("shmat error"); exit(EXIT_FAILURE); } while (1) { char buf[256] = {0}; int ret = read(fd, buf, sizeof(buf)); if (ret < 0) { perror("read error"); exit(EXIT_FAILURE); } if (ret == 0) { continue; } // 将读取的数据写入共享内存 strncpy(shmaddr, buf, SHM_SIZE); } // 分离共享内存 if (shmdt(shmaddr) < 0) { perror("shmdt error"); exit(EXIT_FAILURE); } // 删除共享内存 if (shmctl(shmid, IPC_RMID, NULL) < 0) { perror("shmctl error"); exit(EXIT_FAILURE); } // 关闭设备 close(fd); return 0; } ``` 上述代码只是一个简单的示例,实际应用中需要根据具体需求进行修改。同时需要注意的是,共享内存需要在多个进程之间进行共享,需要考虑进程间同步和互斥问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值