需求:
一个部分做mp3的解码, 然后给一个单独的pcm播放器用.
这样需要 app_a 不断解码mp3 到 内存区, 然后pcm_player 从内存区不断获取.
本来想用 mmap, (mmap是可以做到多进程读写同步的.). 但是
点击(此处)折叠或打开
-
https://blog.csdn.net/The_Time_Runner/article/details/107050300
-
-
mmap针对Windows和Unix的版本在具体实现上有所不同,对于Windows版本,当length参数比file本身size大的时候,会自动扩展file为指定length大小;而Unix版本不支持自动扩展,即length只能小于等于size of file,如果超出size,则会报错。
-
-
只能刚刚开始时就创建足够大的文件.
所以想下使用 tmpfs 时比较合适的.
-
https://blog.csdn.net/u011285208/article/details/90752148
-
-
tmpfs是一种虚拟内存文件系统正如这个定义它最大的特点就是它的存储空间在VM里面. 由于tmpfs使用的是VM,因此它比硬盘的速度肯定要快,因此我们可以利用这个优点使用它来提升机器的性能
-
/* reader */
-
#include <unistd.h>
-
#include <stdlib.h>
-
#include <string.h>
-
#include <stdint.h>
-
#include <ctype.h>
-
#include <sys/types.h>
-
#include <sys/stat.h>
-
#include <fcntl.h>
-
#include <stdio.h>
-
#include <limits.h>
-
#include <errno.h>
-
#include <sys/types.h>
-
#include <sys/stat.h>
-
#include <fcntl.h>
-
-
#define FILE_TMPFS "/run/user/1000/tmpfs.file"
-
#define TIME_SPLICE 100
-
-
int main(void)
-
{
-
int fd = -1;
-
while (fd < 0) {
-
fd = open(FILE_TMPFS, O_RDONLY);
-
if (fd < 0) {
-
usleep(100000);
-
continue;
-
}
-
}
-
-
char line[256];
-
int idx = 0;
-
uint32_t timeout = 0;
-
while (1) {
-
idx = read(fd, line, 8);
-
line[8] = 0;
-
if (idx < 0) {
-
fprintf(stderr, "read failed. [%d]", idx);
-
break;
-
}
-
else if (idx > 0) {
-
fprintf(stderr, "[%s]\n", line);
-
timeout = 0;
-
}
-
else { // ==0, timeout
-
timeout += TIME_SPLICE;
-
if (timeout > 1000) {
-
fprintf(stderr, "read timeout. [%d]\n", timeout);
-
break;
-
}
-
}
-
usleep(TIME_SPLICE * 1000);
-
}
-
-
close(fd);
-
return 0;
-
}
-
#define _GNU_SOURCE
-
-
#include <unistd.h>
-
#include <stdlib.h>
-
#include <string.h>
-
#include <stdint.h>
-
#include <ctype.h>
-
#include <sys/types.h>
-
#include <sys/stat.h>
-
#include <fcntl.h>
-
#include <stdio.h>
-
#include <limits.h>
-
#include <errno.h>
-
#include <sys/types.h>
-
#include <sys/stat.h>
-
#include <fcntl.h>
-
-
#define FILE_TMPFS "/run/user/1000/tmpfs.file"
-
-
int main(void)
-
{
-
int fd = open(FILE_TMPFS, O_WRONLY | O_CREAT | O_TRUNC, 0666);
-
if (fd < 0) {
-
fprintf(stderr, "open error. [%s]\n", strerror(errno));
-
return -1;
-
}
-
-
char line[256];
-
uint32_t idx = 0;
-
while (idx < 10) {
-
sprintf(line, "%08x", idx++);
-
write(fd, line, strlen(line));
-
sleep(1);
-
}
-
-
syncfs(fd);
-
close(fd);
-
fprintf(stderr, "writer finished. close file-desc");
-
-
sleep(10);
-
unlink(FILE_TMPFS);
-
-
return 0;
-
}
阅读(1014) | 评论(0) | 转发(0) |