嵌入式Linux网络编程·笔记3·系统调用篇(二)

这篇博客详细介绍了嵌入式Linux中的系统调用,包括fcntl的功能、参数和使用场景,如文件描述符复制、文件状态标志设置等。接着讨论了mmap和munmap,解释了内存映射的概念、参数和注意事项,强调了映射文件时的权限和大小要求。最后提到了dup和dup2用于文件描述符的复制以及stat和fstat在获取文件信息中的应用。
摘要由CSDN通过智能技术生成

七、fcntl(操作文件的特性)

1、头文件:#include <unistd.h>  #include <fcntl.h>

2、函数原型:int fcntl(int fd, int cmd);

                       int fcntl(int fd, int cmd, long arg);

                       int fcntl(int fd, int cmd, struct flock *lock);

3、函数形参:fd:文件描述词;

                       cmd:操作命令;

                       arg:供命令使用的参数;

                       lock:同arg。

4、函数返回值:与命令有关。如果出错,所有命令都返回-1,如果成功则返回某个其他。

     下列三个命令有特定返回值:

             F_DUPFD返回新的文件描述符;

             F_GETFD返回相应标志;

             F_GETFL以及F_GETOWN返回一个正的进程ID或负的进程组ID。

5、功能描述:(file control)根据文件描述词来操作文件的特性。

具体功能及其对应cmd值(5种):

(1)复制一个现有的描述符(cmd=F_DUPFD)。

(2)获得/设置文件描述符标志(cmd=F_GETFD或F_SETFD)。

(3)获得/设置文件状态标志(cmd=F_GETFL或F_SETFL)。

(4)获得/设置异步I/O所有权(cmd=F_GETOWN或F_SETOWN)。

(5)获得/设置记录锁(cmd=F_GETLK,F_SETLK或F_SETLKW)。

6、特殊文件描述符:1个程序会打开3个文件:标准输入0,标准输入1,标准出错2。

7、阻塞与非阻塞

(1)阻塞:指调用结果返回前,当前线程会被挂起。调用线程只有在得到结果后才会返回。

(2)非阻塞:指在不能立刻得到结果前,该调用不会阻塞当前线程。

(3)阻塞和非阻塞,描述的是一种状态,同步与非同步描述的是行为方式

(4)读文件因为没有数据而阻塞会进入休眠状态,休眠时不占用cpu,节省cpu资源。

(5)举例(来源知乎):

       你打电话问书店老板有没有某本书,若是阻塞式调用,你会一直把自己“挂起”,直到得到这本书有没有的结果,若是非阻塞式调用,你不管老板有没有告诉你,你自己先一边去玩了, 当然你也要偶尔过几分钟check一下老板有没有返回结果。在这里阻塞与非阻塞与是否同步异步无

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值