将文件描述符从主进程传递到其线程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将文件描述符从主进程传递到其线程相关的知识,希望对你有一定的参考价值。

我有一个关于文件描述符从进程传递到其线程的简单问题。我几乎肯定但需要确认,如果文件描述符被视为普通整数,因此可以通过pthread_create()线程参数传递给整数数组,例如传递给进程线程。谢谢

答案

是的,文件描述符只是整数,因此可以像任何其他变量一样作为函数参数传递。它们仍将引用相同的文件,因为打开的文件由进程中的所有线程共享。

#include <pthread.h>

struct files {
  int  count;
  int* descriptors;
};

void* worker(void* p)
{
  struct files *f = (struct files*)p;
  // ...
}

int main(void)
{
  struct files f;
  f.count = 4;
  f.descriptors = (int*)malloc(sizeof(int) * f.count);
  f.descriptors[0] = open("...", O_RDONLY);
  // ...
  pthread_t t;
  pthread_create(&t, NULL, worker, &f);
  // ...
  pthread_join(t);
}
另一答案

术语“过程”的粗略定义可以是“具有至少一个线程的存储空间”。换句话说,同一进程中的所有线程共享一个内存空间。

现在,文件描述符基本上是引用属于该进程的表中的对象的索引。由于对象属于进程,并且线程在进程内部运行,因此线程可以通过它们的索引(“文件描述符”)引用这些对象。

以上是关于将文件描述符从主进程传递到其线程的主要内容,如果未能解决你的问题,请参考以下文章

不断地将事件从主进程传递到渲染器进程

如何将图像视图从改造加载的片段传递给子片段?

从主函数向线程发送信号?

如何在 Fragment 之间传递值

pthreads 进程未显示在 ps 输出中

线程间的參数传递