gpt4 book ai didi

c - 从多个线程写入不同文件后获取 ferror()

转载 作者:太空宇宙 更新时间:2023-11-03 23:31:15 24 4
gpt4 key购买 nike

我正在尝试生成多个线程,并为每个线程写入不同的文件(线程 1 写入文件 1,等等)。但是,在设置线程执行 ferror() 后,阻止我在主进程中执行进一步的文件操作。我尝试清除错误,但没有解决。这是我目前拥有的代码:

#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>

void * bla (void *arg) {
fprintf((FILE *) arg, "Hey, printing to file");
}

int main() {
FILE *f1 = fopen("out0", "rw");
FILE *f2 = fopen("out1", "rw");

pthread_t t[2];
pthread_create(&t[0], NULL, bla, f1);
pthread_create(&t[1], NULL, bla, f2);

pthread_join(t[0], NULL);
pthread_join(t[1], NULL);
printf("%d\n", ferror(f2)); // ERROR: ferror() is set to 1 here!

//fseek(f1, 0, SEEK_END);
fseek(f2, 0, SEEK_END);
long pos = ftell(f2); // This still works
printf("%ld\n", pos);
clearerr(f2); // Trying to clear the error, flag clears, but further operations fail
char *bytes = malloc(pos);
int err = fread(bytes, 1, 4, f2); // fread returns 0
printf("%d\n", ferror(f2));
printf("%d\n", err);
bytes[pos-1] = '\0';
printf("%s", bytes);
free (bytes);

fclose(f1);
fclose(f2);

return 0;

注意线程打开的文件不应该存在,如果存在应该清除。任何帮助将不胜感激。谢谢!

最佳答案

fopen

mode 参数应该是 "r+"(如果文件应该存在)或 "w+"(甚至可能是 "a+")而不是 "rw"。不是有效模式的字符串 "rw" 可能被解释为 "r" 模式,您不能 fprintf这样的 FILE*

关于c - 从多个线程写入不同文件后获取 ferror(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14821552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com