我需要解决此问题:进行双向父级子级沟通,其中子级被过滤(在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;
}`
我尝试制作一个单侧管道,并且可以正常工作,但是我对如何制作单侧管道不了解...