相关疑难解决方法(0)

在多个进程之间共享POSIX信号量

我需要创建两个子进程,每个子进程调用execvpater被分叉,可执行文件在它们之间共享POSIX信号量.

我是否需要创建共享内存或仅实现命名信号量?

我从以下链接得到两个答案:

  1. 分叉子进程使用相同的信号量吗?
  2. 如何使用共享内存在进程之间共享信号量

但我对如何继续实施感到困惑.

c posix semaphore ipc

12
推荐指数
1
解决办法
1万
查看次数

sem_init(...):什么是pshared参数?

在研究生班,我们必须使用信号量来完成线程的工作.

我们被指示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参数?

multithreading semaphore

11
推荐指数
1
解决办法
1万
查看次数

具有多个客户端C / unix的简单TCP服务器

我在理解套接字编程时遇到问题,需要一些帮助。我想修改我编写的接受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)

c unix network-programming tcp client-server

3
推荐指数
2
解决办法
3万
查看次数