C 如何强制fseek()移动光标
我有一个程序,它创建多个线程,每个线程都试图在一个文件中的不同位置(偏移量)写入100字节。 第一个线程从0开始写入100字节,第二个线程从100开始写入100字节,第三个线程从300开始写入100字节,依此类推 如果线程是按这个顺序执行的,那么一切都可以,我不需要fseek。但对于实时并发性,如果我将第一个线程置于“睡眠(2)”状态2秒钟,等待所有其他线程完成,然后使用fseek将文件光标移动到文件的开头,则不会发生这种情况。 我使用互斥来处理并发性。 代码示例:C 如何强制fseek()移动光标,c,gcc,stdio,C,Gcc,Stdio,我有一个程序,它创建多个线程,每个线程都试图在一个文件中的不同位置(偏移量)写入100字节。 第一个线程从0开始写入100字节,第二个线程从100开始写入100字节,第三个线程从300开始写入100字节,依此类推 如果线程是按这个顺序执行的,那么一切都可以,我不需要fseek。但对于实时并发性,如果我将第一个线程置于“睡眠(2)”状态2秒钟,等待所有其他线程完成,然后使用fseek将文件光标移动到文件的开头,则不会发生这种情况。 我使用互斥来处理并发性。 代码示例: offset=0;/
offset=0;//for the first thread
char data[100];
int length; // how many chars are currently in data
FILE * f;
pthread_mutex_lock(&mutexFileWrite);
f = fopen(fileName, "a");
fseek(f,offset, SEEK_SET);
fwrite(data,sizeof(char),length,f);
fclose(f);
pthread_mutex_unlock(&mutexFileWrite);
如果不打算只附加到文件,请不要在附加模式下打开该文件 从POSIX参考中: 使用append模式(模式参数中的第一个字符是a)打开文件将导致对文件的所有后续写入都被强制到文件的当前结尾,,而不考虑对fseek()的中间调用。
看起来您正在寻找
r+
模式。如果您不打算只附加到文件,请不要在附加模式下打开该文件
从POSIX参考中:
使用append模式(模式参数中的第一个字符是a)打开文件将导致对文件的所有后续写入都被强制到文件的当前结尾,,而不考虑对fseek()的中间调用。
看起来您正在寻找r+
模式