在客户端和服务器之间使用fifo

时间:2018-06-24 07:41:24

标签: c fifo read-write

我正在尝试从客户端中的stdin读取文件名,并使用服务器来检索文件内容。我在客户端和服务器之间将FIFO用于IPC。 我的代码如下:

#include "myhead.h"
#define fifo1 "/tmp/fifo.1"
#define fifo2 "/tmp/fifo.2"


void client(int readfd,int writefd);
int main(){
int readfd,writefd;
if((writefd=open(fifo1,1))<0)
        printf("error opening fifo1\n");
if((readfd=open(fifo2,0)<0))
    printf("error opening fifo2\n");
client(readfd,writefd);
close(readfd);
close(writefd);
if(unlink(fifo1)<0)
printf("error in unlinking fifo1\n");
if(unlink(fifo2)<0)
printf("error unlinking fifo2\n");

}

void client(int readfd,int writefd)
{
char buff[1050];
printf("enter file name:\n");
if(fgets(buff,100,stdin)==NULL)
printf("client: error reading filename\n");
int n=strlen(buff);

if(buff[n-1]=='\n')
n--;
printf("filename length:%d",n);
printf("file path:%s\n",buff);

if(write(writefd,buff,n)!=n)
printf("error writing filename to fifo\n");

while((n=read(readfd,buff,1024))>0)
          if(write(1,buff,n)!=n)
          printf("client: data write error");

if(n<0)
printf("client: data read error");
  }

服务器代码:

#include "myhead.h"
#define fifo1 "/tmp/fifo.1"
#define fifo2 "/tmp/fifo.2"
#define PERMS 0666

void server(int readfd,int writefd);
extern int errno;
int main(){
int readfd,writefd;
if((mknod(fifo1,S_IFIFO|PERMS,0)<0)&&(errno!=EEXIST))
    printf("cant create fifo: %s",fifo1);
if((mknod(fifo2,S_IFIFO|PERMS,0)<0)&&(errno!=EEXIST))
    printf("cant create fifo: %s",fifo2);

if((readfd=open(fifo1,0))<0)
    printf("error opening fifo1 in server");
if((writefd=open(fifo2,1))<0)
    printf("error line 13 server");
server(readfd,writefd);
close(readfd);
close(writefd);

}

void server(int readfd,int writefd){
int n = 0;  
char buff[100];
char content[1000];
read(readfd,buff,100);
int fd;
if((fd=open(buff,0))<0)
    printf("error opening file,fd=%d",fd);

printf("fd=%d\n",fd);
read(fd,content,1000);

write(writefd,content,n);
}

(myhead.h是我制作的头文件,其中包含所有必需的头文件)

我得到的输出是这样:

enter file name:
./sampletext   (=> my input, sample.txt is a txt file in the same dir)
filename length:12file path:./sampletext
error opening file,fd=-1fd=-1
^C
[1]+  Done                    ./server.out

请说明此代码中的错误是什么?

0 个答案:

没有答案