linux下的/dev/shm/目录

linux下的/dev/shm/目录
/dev/shm/是linux下一个非常有用的目录,因为这个目录不在硬盘上,而是在内存里。因此在linux下,就不需要大费周折去建ramdisk,直接使用/dev/shm/就可达到很好的优化效果。 /dev /shm/需要注意的一个是容量问题,在linux下,它默认最大为内存的一半大小,使用df -h命令可以看到。但它并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是0字节;如果它最大为1G,里头放有 100M文件,那剩余的900M仍然可为其它应用程序所使用,但它所占用的100M内存,是绝不会被系统回收重新划分的,否则谁还敢往里头存文件呢? 默认的最大一半内存大小在某些场合可能不够用,并且默认的inode数量很低一般都要调高些,这时可以用mount命令来管理它。 mount -o size=1500M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm  在2G的机器上,将最大容量调到1.5G,并且inode数量调到1000000,这意味着大致可存入最多一百万个小文件。为 ...
  • 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、付费专栏及课程。

余额充值