我正在尝试创建一个用不同线程写入文件的程序。我写了以下代码。
#include <time.h>
#include <stdlib.h>
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
pthread_t thread_id;
void *write_file(void *arg) {
int number = (int) arg;
FILE *file_write = fopen("file.txt", "w");
fprintf(file_write, "Number: %d\n", number);
fclose(file_write);
printf("Thread Finalized\n");
return NULL;
}
int main() {
chdir("/");
srand(time(NULL));
int cont = 0;
while(1) {
int random_number = rand();
if(random_number % 5 == 0) {
cont++;
int response = pthread_create(&thread_id, NULL, write_file, (void *) random_number);
if(response != 0) {
printf("Can't create process\n");
} else {
printf("Thread created successfully\n");
}
}
sleep(1);
if(cont == 8) {
break;
}
}
return 0;
}
但是当我打开文件时,我发现只有一行如下:
Number: 1069822935
我期望文件应包含8行,其中随机数可被5整除。
谢谢。
答案 0 :(得分:3)
您的文件模式无法正常工作。如果每个线程以“w”打开文件 - 写入 - 每个都将覆盖已经存在的任何内容。 “a”for append应该有用。
答案 1 :(得分:2)
使用"w"
,每次调用fopen
都会截断文件。所以他们每个人都从头开始写。您应该以附加模式打开文件...然后您将遇到并发问题; - )