本资源提供详细的Linux环境下C语言实现进程间通信(IPC)及信号量操作的示例源代码,适合学习和参考。
Linux C 进程间通信可以使用信号灯机制来实现同步控制。下面是一个简单的示例程序源码:
```c
#include
#include
#include
#include
#include
#include
union semun {
int val; /* Value for SETVAL */
struct semid_ds *buf; /* Buffer for IPC_STAT, IPC_SET */
unsigned short *array; /* Used for GETALL and SETALL */
};
int create_semaphore(key_t key) {
int sem_id = semget(key, 1, 0644 | IPC_CREAT);
if (sem_id == -1) {
perror(Semaphore creation failed);
exit(EXIT_FAILURE);
}
return sem_id;
}
void set_semaphore_value(int sem_id, unsigned short value) {
union semun arg;
arg.val = value;
if (semctl(sem_id, 0, SETVAL, arg) == -1) {
perror(Semaphore setting failed);
exit(EXIT_FAILURE);
}
}
int main() {
key_t key = ftok(., a);
int sem_id = create_semaphore(key);
set_semaphore_value(sem_id, 1); // 初始化信号量值为1
return 0;
}
```
此示例代码展示了如何使用`semget()`创建一个信号灯,并用`semctl()`设置其初始值。