📄 prg4_8server.c
字号:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include "fifo.h"
#include <readline/readline.h>
#include <readline/history.h>
#include <fcntl.h>
#define MAXLINE 100
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
int main(int argc,char **argv)
{
int readfifo,writefifo,dummyfd,fd;
char *ptr,buff[MAXLINE],fifoname[MAXLINE];
char serr[256] = {0};
pid_t pid;
size_t n;
if ((mkfifo(SERV_FIFO,FILE_MODE) <0) && (errno != EEXIST))
{
sprintf(serr,"can't create %s",SERV_FIFO);
perror(serr);
exit(0);
}
readfifo = open(SERV_FIFO,O_RDONLY,0);
dummyfd = open(SERV_FIFO,O_WRONLY,0); //never used
while( (n =read(readfifo,buff,MAXLINE))>0)
{
if (buff[n-1] == '\n')
n--;
buff[n] = '\0';
if ((ptr = strchr(buff,' ')) == NULL)
{
sprintf(serr,"bogus request:%s",buff);
perror(serr);
continue;
}
*ptr++ = 0; //ptr = pathname
pid = atol(buff);
snprintf(fifoname,sizeof(fifoname),"/tmp/fifo.%ld",(long)pid);
if ((writefifo = open(fifoname,O_WRONLY,0)) <0)
{
sprintf(serr,"can't open:%s",fifoname);
perror(serr);
continue;
}
if ((fd = open(ptr,O_RDONLY)) <0)
{
snprintf(buff+n,sizeof(buff)-n,":can't open:%s\n",
strerror(errno));
n = strlen(ptr);
write(writefifo,ptr,n);
close(writefifo);
}
else
{
while( (n = read(fd,buff,MAXLINE)) > 0)
write(writefifo,buff,n);
close(fd);
close(writefifo);
}
}
exit(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -