20220829-0902学习

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

参数说明:

pathname: 打开文件的路径

flags : 打开标志

mode :  只要使用 O_CREAT标志,就要使用这个参数,设置权限


返回值:
成功返回文件描述符
失败返回-1

  1、以只读的方式打开文件,如果文件不存在,打开失败, 文件存在打开成功,文件指针指向文件开始的位置!

    2、以只写的标志打开文件,如果文件不存在,打开失败, 文件存在打开成功, 默认不清空文件中的内容,文件指针指向开始位置

    3、一般以写方式打开文件,会将 O_CREAT|O_WRONLY|O_TRUNC,一起使用,  表示的含义是:
       如果文件不存在, 以第三个参数的权限创建文件,并且以写的方式打开文件
       如果文件存在, 以写的方式打开文件,并且清空文件中所有的内容

    4、默认情况下,新建文件的权限是 mode & (~umask), 如果不希望权限受到掩码的影响,可以直接将掩码设置为0

    5、以追加的方式打开文件,如果文件不存在,打开失败, 文件存在打开成功,文件指针指向文件尾部
        ps :追加的方式作写操作,仍然要或上 O_WRONLY


  pid_t wait(int *wstatus);


  函数功能:  回收子进程的资源(接收子进程退出的原因和返回值)

   
   WIFEXITED(wstatus):  如果子进程是调用exit  正常退出,该宏为真

   WEXITSTATUS(wstatus): 如果上面的宏为真,调用该宏过滤退出返回值

   WIFSIGNALED(wstatus):如果子进程是由于信号退出的,该宏为真

   WTERMSIG(wstatus):如果上面的宏为真,可以调用该宏过滤信号值


   注意事项:
   1、如果没有子进程,wait是一个非阻塞函数
   2、如果有子进程,wait  是一个阻塞函数, 如果有子进程退出,wait 立马解除阻塞,回收子进程的资源
   3、返回值的返回  0-255
 

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                          void *(*start_routine) (void *), void *arg);

函数功能:  创建线程

参数说明:

pthread : 传出新建线程的标识符

attr:  设置线程属性

start_routine: 线程入口函数

arg:  给新建线程传递参数


返回值:成功返回0,  失败返回错误编号

PS:  编译时要手动连接到线程库(gcc   XX.c  -o   xx   -lpthread)
 

pthread_exit:  线程退出

ps:  在线程入口函数中, return 和 pthread_exit 的意义是一样的
     在子函数中, return表示本函数结束, pthread_exit 仍然表示当前线程结束!!!


     在线程中谨慎使用  exit !

int fcntl(int fd, int cmd, ... /* arg */ );

函数功能:  设置文件锁


参数说明:

fd  : 文件描述符

cmd  :命令

   F_SETLKW   :设置文件锁

struct flock {
    ...
        short l_type;    /* Type of lock: F_RDLCK,
                            F_WRLCK, F_UNLCK */
    short l_whence;  /* How to interpret l_start:
                        SEEK_SET, SEEK_CUR, SEEK_END */
    off_t l_start;   /* Starting offset for lock */
    off_t l_len;     /* Number of bytes to lock */
    ...
};

int fcntl(int fd, int cmd, ... /* arg */ );

函数功能:  设置文件锁


参数说明:

fd  : 文件描述符

cmd  :命令

   F_SETLKW   :设置文件锁

struct flock {
    ...
        short l_type;    /* Type of lock: F_RDLCK,
                            F_WRLCK, F_UNLCK */
    short l_whence;  /* How to interpret l_start:
                        SEEK_SET, SEEK_CUR, SEEK_END */
    off_t l_start;   /* Starting offset for lock */
    off_t l_len;     /* Number of bytes to lock */
    ...
};

注意事项:

1、管道两端都是正常的, 如果管道里没有数据, read函数是阻塞的,
   如果写端断开或者出现异常, read函数解除阻塞,返回值为0


2、如果读端异常, 写端继续往管道中写数据,内核会发送SIGPIPE信号,
   该信号的默认操作是程序退出, 所以写端一定要捕捉  SIGPIPE信号
 

int shmget(key_t key, size_t size, int shmflg);

函数功能: 创建共享内存

参数说明:

key : 键值

size : 内存大小

shmflg:  设置标志   IPC_CREAT|0777


返回值:
成功返回共享内存的标识符
失败返回-1
 

 void *shmat(int shmid, const void *shmaddr, int shmflg);

  函数功能:  将共享内存映射到程序中

  参数说明:

  shmid  : 共享内存标识符

  shmaddr :指定映射地址, 一般使用NULL,由系统指定

  shmflg: 设置标志  ,一般使用  0


  返回值: 
  成功返回映射的虚拟地址
  失败返回  (void*)-1
 

int msgget(key_t key, int msgflg);

函数功能:  创建 或者 获取消息队列的标识符

参数说明:   

key  :  键值,  一个键值和一个消息队列是一一对应的关系

msgflg:  设置标志,  一般使用   IPC_CREAT|0777

返回值:

成功返回消息队列的标识符

失败返回-1
 

  int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);

  函数功能: 往消息队列中发送一个消息

  参数说明:

  msqid:  消息队列标识符

  msgp:   打包消息信息结构体的起始地址

  msgsz:  消息大小

  msgflg:  设置阻塞标志, 0 表示阻塞
 
  返回值:
  成功返回0, 失败返回-1
  
  struct msgbuf {
               long mtype;       /* message type, must be > 0 */
               char mtext[1];    /* message data */
           };
 

ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,
                      int msgflg);

函数功能:  从消息队列中读取数据

参数说明:
msqid  :  消息队列的标识符

msgp:  接收消息数据结构体的起始地址

msgtype:  消息类型
        如果类型是0, 默认读取第一个消息
        如果类型是非零值, 从第一个消息开始查找,读取指定类型的消息

msgflg:  设置阻塞标志, 0表示阻塞
 

返回值: 
成功返回读到的实际大小, 失败返回-1
  
  struct msgbuf {
               long mtype;       /* message type, must be > 0 */
               char mtext[1];    /* message data */
           };

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值