C - 程序只用fprintf

时间:2017-04-14 21:11:55

标签: c file printf

我正在尝试创建一个用不同线程写入文件的程序。我写了以下代码。

#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整除。

谢谢。

2 个答案:

答案 0 :(得分:3)

您的文件模式无法正常工作。如果每个线程以“w”打开文件 - 写入 - 每个都将覆盖已经存在的任何内容。 “a”for append应该有用。

另见:http://www.c4learn.com/c-programming/c-file-open-modes/

答案 1 :(得分:2)

使用"w",每次调用fopen都会截断文件。所以他们每个人都从头开始写。您应该以附加模式打开文件...然后您将遇到并发问题; - )