繁体   English   中英

如何将当前目录中的所有文件从c中的线程添加到数组中?

[英]How do I add all the files in the current directory to an array from a thread in c?

#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;
}

这似乎在调试器中工作正常,但是当我运行它时,终端上没有任何显示。 我将用以下方式替换stage1方法中的printf行:

buff1[i] = ent;
i++;

我将添加更多代码以确保我始终指向正确的位置,但这就是我现在正在使用的内容。 我希望它可以打印文件,所以我知道它可以工作。

在工作线程有时间做任何事情之前,您的主线程正在退出,从而结束了该过程。 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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM