在C语言中读取不同线程中的文件
我有一个多线程服务器程序,其中每个线程都需要读取文件的内容,以检索客户端请求的数据 我在C中使用pthreads来创建一个线程,并将函数传递给线程将执行的线程在C语言中读取不同线程中的文件,c,multithreading,pthreads,C,Multithreading,Pthreads,我有一个多线程服务器程序,其中每个线程都需要读取文件的内容,以检索客户端请求的数据 我在C中使用pthreads来创建一个线程,并将函数传递给线程将执行的线程 在函数中,如果我用fopen()指定一个新的文件指针,然后用fgets()读取文件内容,每个线程是否都有自己的文件偏移量?也就是说,如果线程1正在从文件中读取,并且当线程2第一次读取时它位于文件的第5行,那么线程2是从第5行开始读取,还是独立于线程1在文件中的位置?每个打开的文件都只有一个文件指针。它有一个关联的FD和一个文件位置(如您所
在函数中,如果我用
fopen()
指定一个新的文件
指针,然后用fgets()
读取文件内容,每个线程是否都有自己的文件偏移量?也就是说,如果线程1正在从文件中读取,并且当线程2第一次读取时它位于文件的第5行,那么线程2是从第5行开始读取,还是独立于线程1在文件中的位置?每个打开的文件都只有一个文件指针。它有一个关联的FD和一个文件位置(如您所说的文件偏移量)
但是您可以fopen
两次(从两个不同的线程或者从同一个线程)打开文件,正如您现在所做的编辑所暗示的那样。这意味着您将有两个关联的FD和两个单独的文件位置
也就是说,这与线程本身无关,只是如果您想要单独的文件位置,您将需要两个FD(使用stdio),这意味着两个文件s。每个打开的文件只有一个文件指针。它有一个关联的FD和一个文件位置(如您所说的文件偏移量)
但是您可以fopen
两次(从两个不同的线程或者从同一个线程)打开文件,正如您现在所做的编辑所暗示的那样。这意味着您将有两个关联的FD和两个单独的文件位置
也就是说,这与线程本身无关,只是如果您想要单独的文件位置,您将需要两个FD(使用stdio),这意味着两个文件s.请参见编辑。我的意思是,我在函数中打开一个文件
,因此每个线程都会打开自己的文件
。只要您不使用特定文件*
中的dup()
或dup2()
(或fcntl()
)上的fileno(fp)
,所有注释都是准确的。破坏东西是有可能的,但你必须用自己的方式去做。即使使用低级文件描述符I/O,每个open()
调用都会提供一个引用新打开文件描述的新文件描述符,并且读/写位置与打开文件描述相关联。同样,只要不使用dup2()
,并且没有两个线程同时使用同一个文件描述符,就不会有任何问题。请参阅编辑。我的意思是,我在函数中打开一个文件
,因此每个线程都会打开自己的文件
。只要您不使用特定文件*
中的dup()
或dup2()
(或fcntl()
)上的fileno(fp)
,所有注释都是准确的。破坏东西是有可能的,但你必须用自己的方式去做。即使使用低级文件描述符I/O,每个open()
调用都会提供一个引用新打开文件描述的新文件描述符,并且读/写位置与打开文件描述相关联。同样,只要不使用<代码> dUP2()//>代码,并且没有两个线程同时使用同一个文件描述符,就不会有任何麻烦。请考虑<代码> MAMP()/<代码>文件,然后将其作为只读传递给线程。考虑<代码> MAMP()/<代码>文件,然后将其作为只读传递给线程。