试验AUPE里fcntl函数获取文件状态的程序
#include<unistd.h>
#include<stdio.h>
#include<fcntl.h>
#include<errno.h>
#include<stdlib.h>
#include<string.h>
int main(int argc,char**argv)
{
if(argc != 2)
{
perror("error");
exit(1);
}
int flag;
int id;
id = atoi(argv[1]);
flag = fcntl(id,F_GETFL);
if(flag == -1)
{
perror("fcntl error");
exit(1);
}
switch(flag & O_ACCMODE)
{
case O_RDONLY:
printf("read only\n");
break;
case O_WRONLY:
printf("write only\n");
break;
case O_RDWR:
printf("read write\n");
break;
default:
fputs("invalid access mode\n",stderr);
exit(1);
}
if(flag & O_APPEND)
{
printf(", append");
}
if(flag & O_NONBLOCK)
{
printf(", nonblock");
}
putchar('\n');
return 0;
}
./a.out 5 5<>tmp //bash,ksh下使用文件描述符5打开tmp文件,得到是读写属性
read write
./a.out 5 5<>tmp //csh下则报错,说明csh不行
Missing name for redirect.