Filesystems Fcntl()函数 #包括 #包括 #包括 int main(int argc,字符**argv) { int-val; 如果(argc!=2) { printf(“用法:%s\n”,argv[0]); 出口(1); } val=fcntl(atoi(argv[1]),F_GETFL,0); 开关(val&O_ACCMODE) { 仅适用于以下情况: printf(“只读”); 打破 仅适用于以下情况: printf(“仅写”); 打破 案例O_RDWR: printf(“读写”); 打破 违约: printf(“未知访问模式”); } 如果(val&O_追加) printf(“附加”); if(val&O_非块) printf(“非阻塞”); 如果(val&O_同步) printf(“同步写入”); putchar('\n'); 出口(0); }

Filesystems Fcntl()函数 #包括 #包括 #包括 int main(int argc,字符**argv) { int-val; 如果(argc!=2) { printf(“用法:%s\n”,argv[0]); 出口(1); } val=fcntl(atoi(argv[1]),F_GETFL,0); 开关(val&O_ACCMODE) { 仅适用于以下情况: printf(“只读”); 打破 仅适用于以下情况: printf(“仅写”); 打破 案例O_RDWR: printf(“读写”); 打破 违约: printf(“未知访问模式”); } 如果(val&O_追加) printf(“附加”); if(val&O_非块) printf(“非阻塞”); 如果(val&O_同步) printf(“同步写入”); putchar('\n'); 出口(0); },filesystems,Filesystems,在命令行输入中,我必须指定 #include <fcntl.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { int val; if(argc!=2) { printf("Usage: %s <descriptor> \n", argv[0]);

在命令行输入中,我必须指定

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
        int val;

        if(argc!=2)
        {
                printf("Usage: %s <descriptor> \n", argv[0]);
                exit(1);
        }

        val=fcntl(atoi(argv[1]), F_GETFL, 0);


        switch(val & O_ACCMODE)
        {
                case O_RDONLY:
                        printf("read only");
                        break;
                case O_WRONLY:
                        printf("write only");
                        break;
                case O_RDWR:
                        printf("read write");
                        break;
                default:
                        printf("unknown access mode");
        }

        if(val & O_APPEND)
                printf(", append");
        if(val & O_NONBLOCK)
                printf(", nonblocking");
        if(val & O_SYNC)
                printf(", synchronous writes");

        putchar('\n');
        exit(0);
 }
$./a.out 0温度
即使fcntl只检查参数1。
请解释为什么我必须在命令行参数中传递带有重定向符号的文件。

因为这是访问由编号给定的非平凡打开文件描述符的最简单方法。另一种方法是打开(2)一些东西,而不是传递一个数字。@SatoKatsura:这是一个很好的理由。你可能应该做出一个回答来进一步解释你的逻辑。
$./a.out 0 </dev/tty
$./a.out 1 > temp