#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
int safe_fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
{
size_t ret = 0;
do {
clearerr(stream);
ret += fread((char *)ptr + (ret * size), size, nmemb - ret, stream);
} while (ret < nmemb && ferror(stream) && errno == EINTR);
return ret;
}
int safe_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
{
size_t ret = 0;
do {
clearerr(stream);
ret += fwrite((char *)ptr + (ret * size), size, nmemb - ret, stream);
} while (ret < nmemb && ferror(stream) && errno == EINTR);
return ret;
}
///
write process
int main()
{
FILE* fp;
int i =0;
char buff[20];
printf("test/n");
if (EEXIST == mkfifo("/home/jeff/test/fifo/tmp", S_IRWXU))
printf("test/n");
fp = fopen("/home/jeff/test/fifo/tmp", "w");
for (i = 0; i < 10; i++)
{
sprintf(buff, "test : %d/n", i);
safe_fwrite(buff, 1, strlen(buff), fp);
}
sleep(15);
fclose(fp);
}
//
read process
int main()
{
FILE* fp;
int i=0;
char buff[20];
int len = 0;
sprintf(buff, "test : %d/n", 1);
len = strlen(buff);
fp = fopen("/home/jeff/test/fifo/tmp", "r");
if (fp)
printf("open success/n");
for (i = 0; i < 10; i++)
{
memset(buff, 0, 20);
safe_fread(buff,1, len, fp);
printf(buff);
}
fclose(fp);
}