在c中使用fork的数组中的元素的permutatitons

时间:2017-03-16 12:28:31

标签: c arrays fork permutation

int dp[2];                                                                           
void sortOutput() {                                                                  
    pipe(dp); pid_t p = fork();                                                      
    if(p == 0) { close(STDOUT_FILENO); close(dp[0]); dup2(dp[1], STDOUT_FILENO); }   
    else { close(STDIN_FILENO); close(dp[1]); dup2(dp[0], STDIN_FILENO);             
        char str[256][256]; int lines = 0;                                           
        while(!feof(stdin) && lines < 256) { fgets(str[lines],256,stdin);    lines++; }
        qsort(str,lines,256,(void*)strcmp);                                          
        for(;lines>0;lines--) fputs(str[lines],stdout);                              
        int s; waitpid(p,&s,0); exit(0);                                             
    }                                                                                
}               


    int arr[4];

    void swap(int i, int j) {
        int t = arr[j];
        arr[j] = arr[i];
        arr[i] = t;
    }

    int main() {
        int n, i;

        for(i = 0; i < 4; i++)
            scanf("%d",&arr[i]);
        printf("\n");
        sortOutput();   

        pid_t p;
        int s;
        //BELOW IS WHERE I AM HAVING TROUBLE,CODE BELOW I SUCCESFULLY CREATED 24 PROCESSES
        p = fork();


        p = fork();
        if(p == 0) swap(2,3);
        else waitpid(p,&s,0);

        p = fork();
        if(p == 0) swap(0,1);
        else waitpid(p,&s,0);

        p = fork();
        if(p == 0) {
           swap(1,3);

           p = fork();
           if(p == 0) swap(0,3);
           else waitpid(p,&s,0);
        }else waitpid(p,&s,0);

        p = fork();
        if(p == 0) swap(3,2);
        else waitpid(p,&s,0);
        //UP UNTIL HERE 








        for(i = 0; i < 4; i++)
            printf("%d ", arr[i]);
        printf("\n");

        exit(0);
        return 0;
    }

大家好,我试图在c中找到使用forks的数组中元素的所有排列。为此,我需要创建24个进程来成功计算4个元素的所有可能性。我们设法创建了24个进程但似乎无法弄清楚交换索引应该如何执行24个独特的排列。我在纸上绘制了所有的流程图并尝试了很多东西,但不幸的是我无法想出一个解决方案。所以如果有人能指出关于如何绕过这样的事情,我正朝着正确的方向前进,我将不胜感激。提前谢谢

0 个答案:

没有答案