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个独特的排列。我在纸上绘制了所有的流程图并尝试了很多东西,但不幸的是我无法想出一个解决方案。所以如果有人能指出关于如何绕过这样的事情,我正朝着正确的方向前进,我将不胜感激。提前谢谢