我目前正在学习IPC,我有第一个程序
A:为 B 执行 exec 并等待
B:通过fifo接收来自第三个程序“C”的字符串,并且必须将其重新发送给A
我想在执行之前在 A 中打开一个管道,然后将 fd[1] 作为参数传递给 B
if(pipe(fd)==-1){
perror("Pipe Failed");
myExit(EXIT_FAILURE);
}
close(fd[1]);
sprintf(fdString,"%d",fd[1]);
.......
if((int)(pid=fork())>0)
waiting(status);
else if(pid==0){
close(fd[0]);
execl("./B","B",fdString,(char*)0);
perror("Exec failed");
myExit(EXIT_FAILURE);
}
然后在 B 中:
int fd=atoi(argv[1]);
//Receive string from C
len=strlen(string)+1;
if(write(fd,&len,sizeof(int))==-1){
perror("Error on writing length");
exit(EXIT_FAILURE);
}
if(write(fd,string,len)==-1){
perror("Error on writing string");
exit(EXIT_FAILURE);
}
我现在的问题是在 A 中读取此字符串。我正在考虑将 SIGUSR1 发送到 A,只要字符串由 B 在管道上写入并在 A 中具有类似的内容:
signal(SIGUSR1, signalHandler);
........
static void signalHandler(int signo){
switch(signo){
case SIGUSR1:
listen();
break;
default: break;
}
}
........
static void listen(){
int len;
if(read(fd[0],&len,sizeof(int))<sizeof(int)){
perror("Error reading len");
myExit(EXIT_FAILURE);
}
char string[len];
if(read(fd[0],&string,len)<len){
perror("Error reading string");
myExit(EXIT_FAILURE);
}
printf("String: %s with length %d\n", string, len);
}
但是我得到的是 "Error reading len: Success",怎么了?
对不起,如果我的英语不好,任何帮助表示赞赏,谢谢!