📄 test11_8.txt
字号:
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <stdarg.h>
#include <fcntl.h>
void parent(char *argv[ ]);
void child(char *argv[ ]);
int write_buffer(int fd, const void *buf, int count);
int read_buffer(int fd, void *buf, int count);
int readnlstring(int socket, char *buf, int maxlen, char delim);
int main(int argc, char *argv[ ])
{
if(argc<2)
parent(argv);
else
child(argv);
return 0;
}
void parent(char *argv[ ])
{
char buffer[100];
int fd;
close(0);
if(mkfifo("my-fifo",0600)==-1)
{
printf("error, failed to creat my-fifo!\n");
exit(254);
}
printf("the server is listening on my-fifo.\n");
if(fd=open("my-fifo", O_RDONLY)==-1)
{
printf("error, failed to open my-fifo!\n");
exit(254);
}
printf("Client has connected. \n");
while(readnlstring(fd, buffer, sizeof(buffer),0)>=0)
{
printf("received message: %s \n", buffer);
}
printf("No more data; parent exiting. \n");
if(close(fd)==-1)
{
printf("error, close failed!");
exit(254);
}
unlink("my-fifo");
}
void child(char *argv[ ])
{
int fd;
char buffer[100];
if(fd=open("my-fifo", O_WRONLY)==-1)
{
printf("error, failed to open my-fifo!\n");
exit(254);
}
printf("The client is ready. Enter messages, or Ctrl+D when done. \n");
while(fgets(buffer, sizeof(buffer), stdin)!=NULL)
{
write_buffer(fd, buffer, strlen(buffer));
}
printf("client exiting. \n");
if(close(fd)==-1)
{
printf("error, close failed!");
exit(254);
}
}
int write_buffer(int fd, const void *buf, int count)
{
const void *pts=buf;
int status=0, n;
if(count<0)
return(-1);
while(status!=count)
{
if(n=write(fd, pts+status,count-status)==-1)
{
printf("error, failed to write! \n");
exit(254);
}
else if(n<0)
return (n);
status+=n;
}
return(status);
}
int read_buffer(int fd, void *buf, int count)
{
void *pts=buf;
int status=0, n;
if(count<0)
return(-1);
while(status!=count)
{
if(n=read(fd, pts+status,count-status)==-1)
{
printf("error, failed to write! \n");
exit(254);
}
else if(n<0)
return (n);
status+=n;
}
return(status);
}
int readnlstring(int socket, char *buf, int maxlen, char delim)
{
int status;
int count=0;
while(count<maxlen-1)
{
if((status=read_buffer(socket, buf, 1))<1)
{
return -1;
}
if(buf[count]==delim)
{
buf[count]=0;
return 0;
}
count++;
}
buf[count]=0;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -