I have to implement a "printing server". I have 1 client file, and 1 server file:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
int get_line( char *dest, int size );
#define MAX 1024
void main ()
{
char const *pipe = "printservers";
char buffer[MAX];
int fd;
get_line( buffer, MAX );
if( mkfifo( pipe, 0666 ) < 0 )
{
printf( "Cannot create a pipe\n" );
exit( EXIT_FAILURE );
}
fd = open( pipe, O_WRONLY );
write( fd, buffer, MAX );
close( fd );
//unlink( pipe );
}
int get_line( char *dest, int size )
{
int c, i;
for( i = 0; i < size - 1 && ( c = getchar() ) != EOF && c != '\n'; ++i )
dest[i] = c;
if( c == '\n' )
{
dest[i] = c;
++i;
}
dest[i] = '\0';
return i;
}
This is the client, which reads from the standard input a line and writes into a named pipe called printservers. This works as intended.
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#define MAX_BUF 1024
#define MAX_PID 8
int main()
{
int fd;
char * myfifo = "printservers";
char buf[MAX_BUF];
/* open, read, and display the message from the FIFO */
fd = open( myfifo, O_RDONLY );
while( 1 )
{
if( read( fd, buf, MAX_BUF ) > 0 )
printf("Received: %s\n", buf);
}
close(fd);
return 0;
}
This is the server, which are read from the pipe. But it does not work with the while loop. If i send a message from the client, the first message is printed, but the following messages are ignored. Could somebody help me with my problem? Thanks Patrik