首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强制fseek()移动光标

如何强制fseek()移动光标
EN

Stack Overflow用户
提问于 2012-12-29 19:36:21
回答 1查看 362关注 0票数 1

我有一个创建多个线程的程序,每个线程都试图在不同位置(偏移量)的文件中写入100字节。第一个线程从0开始写入100个字节,第二个线程从100开始写入100个字节,第三个线程从300开始写入100个字节,依此类推,如果线程是按这个顺序执行的,那么一切都是正常的,并且我不需要fseek。但是对于实时并发来说,如果我让第一线程处于“睡眠(2)”状态2秒,等到所有其他线程都完成了,并使用fseek将文件光标移动到文件的开头,这种情况就不会发生。我使用互斥锁来处理并发。代码示例:

代码语言:javascript
复制
    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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-29 19:46:06

如果你不打算只追加文件,就不要在追加模式下打开它。

来自fopen的POSIX参考

使用append模式(a作为模式参数中的第一个字符)打开文件时,将导致对该文件的所有后续写入被强制到当时的当前文件末尾,而不管对()的中间调用如何。

看起来你在寻找r+模式。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14081265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档