c - 两个进程写入共享内存

标签 c memory process shared

我必须用 C、Linux 中的信号量和共享内存解决第二个生产者和一个消费者的问题。 我有三个进程:第一个进程是生产者,第二个进程是生产者,第三个进程是消费者。

生产者从自己的文件中读取并将其写入一个缓冲区中。 Consument 必须从缓冲区读取并写入 stdout。

我的问题是:如何在第二个生产者中写入缓冲区的正确位置? 我可能会展示一些代码: 第一制作人:

    while( fgets(line, sizeof(line),fp) ){

    wait(semid,0);

for(i=0;i<1000 && line[i]!='\0';i++){
        buf[i]=line[i];
    }
signal(semid,1);


}

fclose (fp); // close file


signal(semid,1);

第二个生产者是相同的(除了信号量)...如何在缓冲区中正确的位置写入(在第一个生产者之后)?...

消费者:

while(1){
    wait(semid,2);
    printf("\n Proces K: ");
    for (i=0; i<1000 && buf[i]!='\n'; i++){
        printf("%c", buf[i]);
    }



    signal(semid,0);

最佳答案

我使用结构作为共享内存,其中有数组和计数器。

我认为这是解决这个问题的最好方法。现在我的程序运行良好。感谢您的评论。

关于c - 两个进程写入共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24345535/

相关文章:

c++ - C/C++ : How to convert 6bit ASCII to 7bit ASCII

c - ANSI C 中的超便携、小型复杂配置文件库?

macos - Mac 操作系统中的通信问题

c++ - 如何在 linux C++ 中启动进程

将所有数组元素复制到另一个数组中

xcode - GCDAsyncSocket重新启动readDataToData内存增加

c++ - Postgres 是否因为 C 的限制而使用内存上下文?

memory - Tomcat - 如何限制 Tomcat 将使用的最大内存

c - 如何在 C/Linux 中检测程序终止?

c - perl 和 C 脚本的管道