我想使用辅助程序来访问C程序的输入流。我尝试使用FIFO(我在Linux上(将STDIN从一个进程传递到另一个进程,并在第二个程序上查看流的大小,但它给出了分段错误。
第一个程序(写入FIFO(:
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
int fd;
char c;
fd = open("myfifo",O_WRONLY);
if(fd == -1){
printf("Couldn't open FIFO");
return 0;
}
write(fd,&stdin,sizeof(FILE *));
while((c = getchar()) != EOF) { }
printf("n");
close(fd);
}
第二个程序(从FIFO读取(:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
int fd;
char c;
FILE *inptr;
fd = open("myfifo",O_RDONLY);
if(fd == -1){
printf("Couldn't open FIFO");
return 0;
}
read(fd,&inptr,sizeof(FILE *));
close(fd);
int size = 0;
while(1){
system("clear");
fseek(inptr, 0, SEEK_END);
size = ftell(inptr);
fseek(inptr, 0, SEEK_SET);
printf("<%d>",size);
sleep(1);
}
printf("n");
}
通常,您不能对另一个进程做任何事情:操作系统故意禁止它。他们彼此都是孤立的。
您所搜索的是将第一个进程输出与第二个程序输入连接起来,并添加第三个进程来读取它。因此,您应该查看man tee
并使用tee
启动您的两个进程,然后您将能够监视发送的内容。但你应该从头开始,或者说";破解";两个进程中的一个进程如何启动另一个进程以便以编程方式执行相同的操作。