2011-11-23 29 views
2
#include <pthread.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <dirent.h> 

pthread_mutex_t mut1 = PTHREAD_MUTEX_INITIALIZER, 
      mut2 = PTHREAD_MUTEX_INITIALIZER, 
      mut3 = PTHREAD_MUTEX_INITIALIZER, 
      mut4 = PTHREAD_MUTEX_INITIALIZER; 
char *buff1, *buff2, *buff3, *buff4; 

void *stage1(void *arg) 
{ 
    DIR *dir = (DIR*)arg 
    struct dirent *ent; 
    if (dir != NULL) 
    { 
    while ((ent = readdir (dir)) != NULL) 
    { 
    printf ("%s\n", ent->d_name); 
    } 
    closedir (dir); 
    } else 
{ 
    printf("FAILURE"); 
} 
} 

int main(int argc, char *argv[]) 
{ 
    if(argc != 6) 
{ 
    printf("Usage: %s <buffsize> <filesize> <uid> <gid> <string>\n", argv[0]); 
    return(-1); 
} 

int buffsize, filesize, uid, gid; 
sscanf(argv[1],"%d",&buffsize); 
sscanf(argv[2],"%d",&filesize); 
sscanf(argv[3],"%d",&uid); 
sscanf(argv[4],"%d",&gid); 

char *string = argv[5]; 

buff1 = malloc(buffsize * sizeof(*buff1)); 
buff2 = malloc(buffsize * sizeof(*buff2)); 
buff3 = malloc(buffsize * sizeof(*buff3)); 
buff4 = malloc(buffsize * sizeof(*buff4)); 

pthread_t th1,th2,th3,th4,th5; 

    DIR *dir = opendir("."); 

pthread_create(&th1,NULL,stage1,dir); 

if(filesize != -1) pthread_create(&th2,NULL,stage2,buff2); 

return 0; 
} 

這似乎在調試器中正常工作,但是當我運行它時終端上沒有顯示任何內容。我將與被更換的printf線在階段1方法:如何將當前目錄中的所有文件從c中的線程添加到數組?

buff1[i] = ent; 
i++; 

我會添加更多的代碼,以確保我總是指向正確的位置,但是這就是我現在有工作。我希望它能打印文件,所以我知道它的工作原理。

回答

1

在工作線程有時間做任何事情之前,您的主線程正在退出,結束進程。在main()末添加到pthread_join()呼叫:

pthread_t th1,th2,th3,th4,th5; 
    DIR *dir = opendir("."); 

    pthread_create(&th1, NULL, stage1, dir); 

    if (filesize != -1) 
     pthread_create(&th2, NULL, stage2, buff2); 

    pthread_join(th1, NULL); 

    if (filesize != -1) 
     pthread_join(th2, NULL); 

    return 0; 
} 
+0

感謝我覺得自己很蠢,現在增加了一個緩衝不會如我所料的文件,但我的時間不多了,所以我不打算理會花費大量時間在它上面 – Chris

相關問題