#include <string>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <time.h>
#include <unistd.h>
#include <sys/resource.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <pthread.h>
void msleep( long sleeptime )
{
struct timespec timemic, rem;
timemic.tv_sec = (time_t)( sleeptime / 1000 );
timemic.tv_nsec = (sleeptime % 1000) * 1000 * 1000;
nanosleep(&timemic, &rem);
}
void makedir( char* dir ){
mode_t mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
mkdir(dir,mode);
}
void setlimit(){
struct rlimit lm;
getrlimit(RLIMIT_NOFILE,&lm);
lm.rlim_cur = 50000;
lm.rlim_max = 50000;
setrlimit(RLIMIT_NOFILE,&lm);
}
void* transact(void* arg) {
int* num = (int*) arg;
printf("start pthread_id[%d] number[%d]\n",pthread_self(),*num);
try{
char dir[256];
sprintf(dir,"./dat/%d",*num);
makedir(dir);
char fname[256];
for (int i=0;i<1000;i++){
sprintf(fname,"./dat/%d/%d.txt",*num,i);
int fd = open(fname,O_RDWR | O_CREAT);
if (fd == -1){
printf("error open file [%d][%d]\n",*num,pthread_self());
return NULL;
}
printf("file open[%d][%s][%d]\n",fd,fname,pthread_self());
write(fd,(const void*)fname,256);
msleep(10);
}
}catch(...){
}
msleep(1000);
printf("end pthread_id[%d] number[%d]\n",pthread_self(),*num);
return NULL;
}
int main(){
setlimit();
makedir("./dat");
// スレッドループ数設定
int THREAD_NUM = 10;
// スレッド起動
pthread_t pthread[THREAD_NUM];
printf("Thread Create Loop Start\n");
for (int i=0;i<THREAD_NUM;i++){
int* num = new int(i);
pthread_create(&pthread[i], NULL, (void*(*)(void*)) transact, (void*)num);
}
printf("Thread Create Loop End\n");
printf("Thread Join Loop Start\n");
for (int i=0;i<THREAD_NUM;i++){
pthread_join((pthread_t) pthread[i],NULL);
}
printf("Thread Join Loop End\n");
exit(0);
}