Linux_system

c 에서 pthread 를 사용하여 shell script 실행

MasterOfAI 2022. 12. 6. 23:53

test.c

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/stat.h>   // stat
#include <stdbool.h>    // bool type

bool file_exists (char *filename) {
  struct stat   buffer;   
  return (stat (filename, &buffer) == 0);
}

typedef struct thread_data 
{
    int phase;
    int result;

} thread_data;

void *run_sh(void * data)
{
    thread_data *tdata=(thread_data *)data;

    if(tdata->phase==1)
    {   
        system("./test.sh ph1.log");
        if (file_exists("./passed-ph1.log") == 0) 
        {
            tdata->result = 10;
        }
        else
        {
            tdata->result = 5;
        }
    }
    else
    {
        system("./test2.sh ph2.log");
        if (file_exists("./passed-ph2.log") == 0) 
        {
            tdata->result = 10;
        }
        else
        {
            tdata->result = 5;
        }
    }
    pthread_exit(NULL);
}

int main (void)
{
    printf("Main Start C\n");
    pthread_t pthread[2];
    thread_data tdata[2];

    int status = 0;
    tdata[0].phase = 1;
    int thr_id = pthread_create(&pthread[0], NULL, run_sh,(void*)&tdata[0]);
    if(thr_id < 0)
    {
        perror("pthread0 create error");
        exit(EXIT_FAILURE);
    }
    
    tdata[1].phase = 2;
    thr_id = pthread_create(&pthread[1], NULL, run_sh,(void*)&tdata[1]);
    if(thr_id < 0)
    {
        perror("pthread1 create error");
        exit(EXIT_FAILURE);
    }

    pthread_join(pthread[0], NULL);
    pthread_join(pthread[1], NULL);

    if(tdata[0].result == 10)
        printf("Thread 0 passed\n");
    else
        printf("Thread 0 failed\n");

    if(tdata[1].result == 10)
        printf("Thread 1 passed\n");
    else
        printf("Thread 1 failed\n");


    printf("Main end C\n");

    return 0; 
}

test.sh

log=$1
echo "$log"

echo "Hello World" > $log 
sleep 1s
echo "Hello World" >> $log 
sleep 1s
echo "Hello World"  >> $log 
sleep 1s
echo "Hello World"  >> $log 
sleep 1s
echo "Hello World"  >> $log 
sleep 1s
echo "Hello World" >> $log 
sleep 1s
echo "Hello World"  >> $log 
sleep 1s
echo "Hello World"  >> $log 
sleep 1s
echo "Hello World"  >> $log 
sleep 1s
echo "The test.sh end"

newLog="passed-${log}"
mv $log $newLog

test2.sh

#!/bin/sh
log=$1
echo "$log"

echo "Nice too meet you" > $log
sleep 1s
echo "Nice too meet you" >> $log
sleep 1s
echo "Nice too meet you" >> $log
sleep 1s
echo "Nice too meet you" >> $log
sleep 1s
echo "Nice too meet you" >> $log
sleep 1s
echo "Nice too meet you" >> $log
sleep 1s
echo "Nice too meet you" >> $log
sleep 1s
echo "Nice too meet you" >> $log
sleep 1s
echo "Nice too meet you" >> $log
sleep 1s
echo "Nice too meet you" >> $log
sleep 1s
echo "Nice too meet you" >> $log
sleep 1s
echo "Nice too meet you" >> $log
sleep 1s

newLog="failed-${log}"
mv $log $newLog

참조 :

https://yeon-code.tistory.com/29

 

12. 공유메모리 프로그래밍-Pthreads

공유메모리란? 여러 프로세서 (CPU)들이 메모리를 공유하며, 프로세서 사이의 통신이 공유메모리를 통해 이루어지는 것을 말한다. 프로세스를 하나 실행시키면, 그 프로세스가 여러쓰레드를 포

yeon-code.tistory.com

 

'Linux_system' 카테고리의 다른 글

C/C++ 에서 실행 시간을 측정하는 8가지 방법  (0) 2022.12.09
우분투 히든파일(숨김파일) 보이기/감추기  (0) 2022.12.09
Multiplexed I/O - poll()  (0) 2022.09.18
Multiplexed I/O - select()  (0) 2022.09.18
QT  (0) 2022.09.07