2018-8-29

今天在画流程图的时候将实例代码进行了深读


atexit函数是一个特殊的函数,它是在正常程序退出时调用的函数,我们把他叫为登记函数
(函数原型:int atexit (void (*)(void))):

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

void func1()
{
    printf("The process is done...\n");
}
void func2()
{
    printf("Clean up the processing\n");
}
void func3()
{
    printf("Exit sucessful..\n");
}
int main()
{
    atexit(func1);
    atexit(func2);
    atexit(func3);
    exit(0);
}
输出3 2 1
atexit函数的调用顺序是和登记顺序相反的。

类似于该功能的线程的
void pthread_cleanup_push(void (rtn)(void ), void *arg);

void pthread_clean_pop(int execute);
和atexit基本相同


getlimit()和setlimit()系统调用函数:
用来获取和设定资源使用的限制

#include <sys/resource.h>

int getrlimit(int resource, struct rlimit *rlim);
int setrlimit(int resource, const struct rlimit *rlim);
getrlimit(RLIMIT_NOFILE ,&rlim);
setrlimit()
struct rlimit{
        rlim_t rlim_cur;
        rlim_t rlim_max;
}
其中rlim_cur是软限制 rlim_max是硬限制
    rlim_cur<=rlim_max

resource:
RLIMIT_FSIZE :进程可创建的最长的文件长度
RLIMIT_NOFILE :进程最多可以打开文件描述符的值 超出值 则产生EMFILE错误
RLIMIT_NPROC :用户可拥有的最大进程数。

设置 ulimit -c -n -s


unlink()函数

#include<unitsd.h>
int unlink(const char *pathname);

函数说明给的晕 :删除指定的文件,如果为最后连接点,但其他进程打开了这个文件,只有等全部的文件描述符关闭以后才能删除。如果是符号连接,则连接被删除

最后连接点跟符号连接是什么。。。没有找到解释
反正如果是最后连接点的话是errno错误的ELOOP 参数pathname 有过多符号连接问题。


atol()跟atoi()的差别仅是一个转化为整形一个转化为长整型

long atol(const char *nptr);
会自动忽略左空格直到遇到数字或正负符号才开始转换,在遇到非数字或者字符串结束时才结束转换
int atoi(const char *nptr)
跳过前面的空白字符(例如空格,tab缩进)等,直到遇上数字或正负符号才开始做转换,而在遇到非数字或字符串结束符('\0')才结束转换,

isalpha():用来判定一个字符是否是英文字母
《==》isupper()|| islower()

#include <ctype.h>
int isalpha(int c);
    英文则非0
注:该函数是宏定义不是真正的函数

isdigit():计算机C(C++)语言中的一个函数,主要用于检查其参数是否为十进制数字字符


S_ISDIR():判断一个路径是否为目录
一般在之前都会先调用函数stat( FileName, &fp),意味着将FileName这个文件的信息保存到了地址fp中。此时fp.st_mode就是文件FileName的模式,所以S_ISDIR(fp.st_mode)的函数功能是判断fp所指向文件(也就是FileName)是否为目录(dir)类型。


不会写的时候,先去理解阅读大量的简单代码 见的多了 最起码会有印象 再看长代码 照猫画虎 总是有成效的

 接下来关于昨天的pthread家族的回顾 培训印象最深的老王讲了一个小例子 小的不能在小的例子,刚开始以为其实很多东西最起码见过,但是在工作的过程中,发现并不是的,你以为的函数接口不是你以为的函数接口。
 见识和使用关注的太少,现在看到真正的使用 

对于初始化的方式有两种:静态定义和函数动态分配
静态:
  static pthread_mutex_t mtx=PTHREAD_MUTEX_INITIALIZER;
  static pthread_cond_t cond=PTHREAD_COND_INITIALIZER;
动态:
  int pthread_cond_init(pthread_cond_t *cv,NULL);
  int pthread_mutex_init(pthread_mutex_t *restrict mutex,
         NULL);
创建 销毁
int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr)
int pthread_cond_destroy(pthread_cond_t *cond)
等待和计时等待
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime)
激活
pthread_cond_signal()
激活一个等待该条件的线程,存在多个等待线程时按入队顺序激活其中一个;而pthread_cond_broadcast()
激活所有等待线程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值