linux编程--管道编程

1.
旗标在计算机科学中是一个被很好理解的概念。 在它的核心,一个旗标是一个单个整型值, 结合有一对函数, 典型地称为 P 和 V。一个想进入临界区的进程将在相关旗标上调用 P; 如果旗标的值大于零,这个值递减 1 并且进程继续。相反, 如果旗标的值是 0 ( 或更小),进程必须等待直到别人释放旗标。解锁一个旗标通过调用 V 完成;这个函数递增旗标的值, 并且, 如果需要, 唤醒等待的进程。
旗标相当于信号量机制中的互斥体,是一种不常用的说法。

2.mode_t 数据类型究竟是什么类型

让我们逐步查找一下。

首先从文件 /usr/include/sys/stat.h 中找到 mode_t 类型

/usr/include/sys/stat.h -> typedef __mode_t mode_t;

说明 mode_t 只是对 __mode_t 的一种定义。

然后从 /usr/include/bits/types.h 中找到 __mode_t 类型

/usr/include/bits/types.h -> __STD_TYPE __MODE_T_TYPE __mode_t;

说明 __mode_t 也只是对 __MODE_T_TYPE 的一种定义。

/usr/include/bits/typesizes.h -> #define __MODE_T_TYPE __U32_TYPE

说明 __MODE_T_TYPE 是对 __U32_TYPE 的一种定义。

/usr/include/bits/types.h -> #define __U32_TYPE unsigned int

最后 __U32_TYPE 是一种无符号的整数的定义。

从上述推导可以看出,mode_t 实际上也就是一种无符号整数。

另外如下结构 struct stat 定义中的 st_mode 成员变量也是使用的 mode_t 类型的变量。

从 man 2 stat 中可以找到结构 struct stat 的定义,如下:

  struct stat { 
    dev_t   st_dev;   /* ID of device containing file */ 
    ino_t   st_ino;   /* inode number */ 
    mode_t  st_mode;  /* protection */ 
    nlink_t   st_nlink;   /* number of hard links */ 
    uid_t   st_uid;   /* user ID of owner */ 
    gid_t   st_gid;   /* group ID of owner */ 
    dev_t   st_rdev;  /* device ID (if special file) */ 
    off_t   st_size;  /* total size, in bytes */ 
    blksize_t st_blksize; /* blocksize for filesystem I/O */ 
    blkcnt_t  st_blocks;  /* number of blocks allocated */ 
    time_t  st_atime;   /* time of last access */ 
    time_t  st_mtime;   /* time of last modification */ 
    time_t  st_ctime;   /* time of last status change */ 

};

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值