linux c编程疑问之2-----关于/dev/tty和标准输入读入
代码如下:
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#include<unistd.h>
#define DUMMY 0
#define BUFSIZE 1024
char *validID[] = {"123\n", "5678\n", "007\n", "421\n", "F"};
int main(int argc, char *argv[])
{
int fd,flags;
int n;
char userno[BUFSIZE], **ptr;
ptr = validID;
setbuf(stdout, (char *) NULL);
if((fd = open("/dev/tty", O_RDONLY | O_NDELAY)) == -1)
{
printf("open error");
return 1;
}
printf("Please input your ID: \n");
sleep(3);
if(read(0, userno, BUFSIZE) == 0)
// if(read(fd, userno, BUFSIZE) == 0)
{
printf("Bye Bye!\n");
return 2;
}
while((strcmp(*ptr, userno) != 0) && (strcmp(*ptr, "F") != 0))
++ptr;
if(strcmp(*ptr, "F") == 0)
{
puts("Invalid user ID\n");
return 3;
}
flags = fcntl(fd, F_SETFL, flags);
printf("Enter your department Number: \n");
n = read(0, userno, BUFSIZE);
printf("\n Welcome to Department #");
write(1, userno, n);
close(fd);
return 0;
}
问题如下:
1 if((fd = open("/dev/tty", O_RDONLY | O_NDELAY)) == -1)这一句我的机器上返回的fd值是7,这代表的是标准输入(键盘)吗?
2 为什么if(read(0, userno, BUFSIZE) == 0)和if(read(fd, userno, BUFSIZE) == 0)两句都不能达到我想要的效果,程序的运行结果总是“Invalid user ID,然后退出“,有什么办法可以以完成以从键盘输入(以从标准输入读取文件的方式)
谢谢大家指点帮忙!