|
@@ -7,6 +7,7 @@
|
|
|
#include <iostream>
|
|
|
#include <sys/mman.h>
|
|
|
#include <fcntl.h>
|
|
|
+#include <semaphore.h>
|
|
|
|
|
|
struct shm_data {
|
|
|
int width;
|
|
@@ -77,6 +78,7 @@ int main() {
|
|
|
close(cam_fd);
|
|
|
return 1;
|
|
|
}
|
|
|
+ sem_t *sem = sem_open("/my_semaphore", O_CREAT, 0644, 1);
|
|
|
|
|
|
// 计算共享内存大小(缓冲区长度+元数据)
|
|
|
size_t shm_size = sizeof(shm_data) + buf.length; // 使用实际缓冲区长度
|
|
@@ -124,8 +126,10 @@ int main() {
|
|
|
}
|
|
|
|
|
|
// 复制数据到共享内存(带实际数据大小)
|
|
|
+ sem_wait(sem);
|
|
|
memcpy(shared_data->data, cam_buffer, buf.bytesused);
|
|
|
shared_data->size = buf.bytesused; // 记录实际数据大小
|
|
|
+ sem_post(sem);
|
|
|
}
|
|
|
|
|
|
// 清理资源
|
|
@@ -134,6 +138,8 @@ int main() {
|
|
|
munmap(shared_data, shm_size);
|
|
|
close(cam_fd);
|
|
|
close(shm_fd);
|
|
|
+ sem_close(sem);
|
|
|
+ sem_unlink("/my_semaphore"); // 系统范围内删除信号量
|
|
|
shm_unlink("/camera_shm");
|
|
|
|
|
|
return 0;
|