- 论坛徽章:
- 0
|
read 的两种情况,为什么第一中不阻塞,第二种阻塞?
/********************** 情况1 *************************/
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#define MAXLINE 5000
int
main(void)
{
int n;
char line[MAXLINE];
int fd = open("dump", O_RDONLY);
while (1){
n = read(fd, line, MAXLINE);
if (0 > n){
printf("read error\n");
}
else if (n == 0){
printf("read 0\n");
sleep(1);
}
else{
line[n] = 0;
printf(line);
}
}
}
/************************** 情况2 **********************************/
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#define MAXLINE 5000
int
main(void)
{
int n;
char line[MAXLINE];
int fd = open("dump", O_RDONLY);
while (1){
if (0 > (n = read(fd, line, MAXLINE))){
printf("read err\n");
}
else if (n == 0){
printf("read 0\n");
sleep(1);
}
else{
line[n] = 0;
printf(line);
}
}
} |
|