次のコードがあります
typedef struct
{
char word[64];
} DataStructure;
sigset_t set;
FILE *pFile;
static void *print(void *ptr)
{
char *message;
message = (char *)ptr;
int sig;
while(!feof(pFile))
{
sigwait(&set, &sig);
printf("%s \n", message);
sleep(2);
}
return 0;
}
int main(int argc, char *argv[])
{
DataStructure Data;
sigemptyset(&set);
sigaddset(&set, SIGUSR1);
pthread_sigmask(SIG_BLOCK, &set, NULL);
pthread_t thread;
pthread_create(&thread, NULL, print, (void *)Data.word);
pFile = fopen("rhyme1.txt", "r");
while(!feof(pFile))
{
fscanf(pFile, "%s", Data.word);
pthread_kill(thread, SIGUSR1);
}
pthread_join(thread, NULL);
pthread_exit(NULL);
}
/*The output should look like:
Hickory,
dickory,
dock,
The
mouse
ran
up
the
clock.
This code results in:
clock. */
テキスト ファイルを開いて、scanf を使用して行の各単語を読み取ろうとしています。次に、単語は「print」メソッドに送信され (pthread_create のパラメーターを介して)、シグナルが送信されると (pthread_kill を介して) 読み込まれた単語が出力されます。このプロセスは、ファイルが完全に読み込まれて印刷されるまで繰り返されます。