2017-04-14 72 views
0

我想创建一个程序,用不同的线程写一个文件。我写了下面的代码。C程序只写一行fprintf

#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

谢谢。

+5

当你'w'模式下打开它清空文件。如果你想添加到文件,使用'a'模式。 – Barmar

+0

重要的是要注意,如果你想执行文件,你必须在根('/')目录下有一个'file.txt'。 – Lemark

+0

解决了你的'fopen'问题后,你的下一个任务就更加先进了。你将需要防止这些线程彼此跨越。如果你没有,你的文件最终会随机乱码。 –

回答

2

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