当前位置: 技术问答>linux和unix
用fcntl来获取stdin的标志位,加上了重定向以后结果就变了.为什么?
来源: 互联网 发布时间:2017-04-19
本文导语: 有下面这个小程序,用来测试一个文件描述符的文件状态标志: int main(int argc,char* argv[]) { if(argc!=2){ puts("argc!=2"); return 1; } int val=fcntl(atoi(argv[1]),F_GETFL,0); int accmode=val...
有下面这个小程序,用来测试一个文件描述符的文件状态标志:
编译运行:
但是我如果加上了一个重定向:
int main(int argc,char* argv[])
{
if(argc!=2){
puts("argc!=2");
return 1;
}
int val=fcntl(atoi(argv[1]),F_GETFL,0);
int accmode=val&O_ACCMODE;
switch(accmode){
case O_RDONLY:
puts("read only");
break;
case O_WRONLY:
puts("write only");
break;
case O_RDWR:
puts("read write");
break;
default:
puts("error");
break;
}
if(val&O_APPEND)puts("append");
if(val&O_NONBLOCK)puts("nonblock");
if(val&O_SYNC)puts("synchronous write");
putchar('n');
return 0;
}
编译运行:
# ./a.out 0
read write
append
但是我如果加上了一个重定向:
# tty
/dev/pts/0
# ./a.out 0 0
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!
©2012-2021,