我有一个多线程服务器程序,每个线程都需要读取文件内容以检索客户端请求的数据。
我在C中使用pthreads来完成创建线程并将函数传递给线程将执行的线程。
在函数中,如果我使用FILE
分配新的fopen()
指针并随后使用fgets()
读取文件的内容,每个线程是否都有自己的文件偏移量?也就是说,如果线程1正在从文件中读取,并且当线程2第一次读取时它位于文件的第5行,则线程2是否在第5行开始读取,或者它是否与线程1在文件中的位置无关?
答案 0 :(得分:4)
每个打开的FILE
只有一个文件指针。这有一个关联的FD,和一个文件位置(文件偏移量,如你所说)。
但你可以fopen
两次文件(来自两个不同的线程或来自同一个线程) - 正如你现在编辑暗示你正在做的那样。这意味着您将拥有两个关联的FD和两个单独的文件位置。
IE,这与线程本身无关,只是如果你想要单独的文件位置,你需要两个FD(使用stdio)意味着两个FILE
s。