我需要创建两个子进程,每个子进程调用execvpater被分叉,可执行文件在它们之间共享POSIX信号量.
我是否需要创建共享内存或仅实现命名信号量?
我从以下链接得到两个答案:
但我对如何继续实施感到困惑.
在研究生班,我们必须使用信号量来完成线程的工作.
我们被指示sem_init与一堆其他sem_*程序一起使用,但我们没有提供关于每个sem_*方法的详细信息.
原型(和头文件)的sem_init是以下:
#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);
Run Code Online (Sandbox Code Playgroud)
但我不明白pshared值是用来做什么的.根据opengroup.org:
如果
pshared参数具有非零值,则信号量在进程之间共享; 在这种情况下,任何可以访问信号量的进程都sem可以sem用于执行sem_wait(),sem_trywait()和sem_post(),以及sem_destroy()操作.
但我想我不明白说1,2,10,25,50000等之间的区别.我认为如果值为0那么信号量就不会被共享.(但那么,重点是什么?)
如何正确使用此pshared参数?
我在理解套接字编程时遇到问题,需要一些帮助。我想修改我编写的接受3个客户端的服务器代码。我知道我想为每个客户端使用派生,但是我不确定如何在我的代码中实现它。这是我为一个客户编写的原始代码。任何帮助,将不胜感激。
服务器:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
void error(const char *msg)
{
perror(msg);
exit(1);
}
int main(int argc, char *argv[])
{
int sockfd, newsockfd, portno;
socklen_t clilen;
char buffer[256];
struct sockaddr_in serv_addr, cli_addr;
int n;
if (argc < 2) {
fprintf(stderr,"ERROR, no port provided\n");
exit(1);
}
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
error("ERROR opening socket");
bzero((char *) &serv_addr, sizeof(serv_addr));
portno = atoi(argv[1]);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr …Run Code Online (Sandbox Code Playgroud)