Linux上的双向管道通信

时间:2018-12-07 16:13:36

标签: c linux process pipe

我需要解决此问题:进行双向父级子级沟通,其中子级被过滤(在c中完成)。您需要将文件名发送给父级,然后父级通过管道将名称发送给子级,然后,子级应用过滤器并通过管道将结果发送回父级。 我用C做过滤器 `

char * readline(FILE *fp, char *buffer){

int ch;
int i = 0;
size_t buff_len = 0;

buffer = malloc(buff_len + 1);
if (!buffer){ 
    return NULL;
}
while ((ch = fgetc(fp)) != '\n' && ch != EOF)
{
    buff_len++;
    void *tmp = realloc(buffer, buff_len + 1);
    if (tmp == NULL){
        free(buffer);
        return NULL;
    }
    buffer = tmp;
    buffer[i] = (char) ch;
    i++;
}
buffer[i] = '\0';

if (ch == EOF && (i == 0 || ferror(fp)))
{
    free(buffer);
    return NULL;
}
return buffer;
}


void reverse_string(char *s){

int len = strlen(s), k, count = 0;
char tmp;

for(int i = 0, j = 0; j < len; j++){
if(!isalnum(s[j]) || (j == len - 1)){
    if(j < len - 1){
        k = j - 1;
    } 
    else {
        k = j;
    }
    if(count == 1){
        while(i < k){
            tmp = s[i];
            s[i] = s[k];
            s[k] = tmp;
            i++;
            k--;
            count--;
        }
    } 
    else {
        count++;
    }
    i = j + 1;
    }
}
}

void lineByline(FILE * file){
char *s;
int g;
while ((s = readline(file, 0)) != NULL){    
reverse_string(s);
puts(s);
free(s);
}
}

int main(int argc, char ** argv)
{   
FILE* file = fopen(argv[1], "r");
if (file){
    lineByline(file);
} else { 
    perror("Can't open file");
    exit(-1);
    }
return 0;
}`

我尝试制作一个单侧管道,并且可以正常工作,但是我对如何制作单侧管道不了解...

0 个答案:

没有答案