美文网首页
常见知识

常见知识

作者: 郄郄郄 | 来源:发表于2018-04-09 11:22 被阅读0次

#define print(x) printf(”the no, ”#x”,is ”)

这里主要是两个语法。

一是在define语句里,  #x 的意思是,替换为一个以x为内容的字符串。 比如  如果你调用 print(10)  那么#x 就等于是写  "10" 这样的。

第二个语法是, 在C语言里, 连续写两个字符串(不需要任何操作符链接)就等于把它们连接起来。

比如 "the no." "is" 就跟写 "the no.is" 是一回事。 (这个语法大概很多人不知道。。其实是很基本的语法,只不过一般用不上所以不起眼)

有这两点这个很容易理解  比如  print(10)在这里会被展开成: printf("the no." "10" ",is")  也就等价于:  printf("the no.10,is")

int *p1=(int *)0x500;

int *p2=(int *)0x518;

p2-p1=?

指针减法运算规则:地址数值之差除以指针类型的长度。

p2 - p1 的差值为0x18,换成十进制就是24,再除以int的长度4,结果就是6.

int a=8;

int ret=printf("%d\n", a);

ret=?

int arr=[1,2,3,4];

int *p=arr;

printf("%d,%d\n", *p,*(++p));

int *arr[5];

int (*arr)[5];

两者区别?

void testFunc() {

    int i;

    char *str=(char *)malloc(5);

    for(i=0;i<4;i++){

        str[i]=i;

    }

    free(str);

    strcpy(str, "test");

    printf("%s\n", str);

}

打印出什么

linux创建线程的函数pthread_create,有四个参数,依次是:1.指向线程标识符的指针 2. 线程的属性 3.线程运行函数的起始地址 4. 线程运行函数的参数(传递的也是指针)

编译时需要加 -lpthread, pthread_join用来等待一个线程的结束

线程的信号量是一种特殊的变量,它可以被增加或减少,但对其的关键访问被保证是原子操作。如果一个程序中有多个线程试图改变一个信号量的值,系统将保证所有的操作都将依次进行。

信号量一般常用于保护一段代码,使其每次只被一个执行线程运行。信号量是用来调协线程对共享资源的访问的。

这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。

互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,

特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源

linux daemon(守护进程)是运行在后台的一种特殊进程,它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。

它不需要用户输入就能运行而且提供某种服务。Linux系统的大多数服务器就是通过守护进程实现的,常见的守护进程包括系统日志进程

,web服务器httpd,数据库服务器mysqld等

守护进程一般在系统启动时开始运行,除非强行终止,否则直到系统关机都保持运行。一个守护进程的父进程是init进程,因为它真正的父进程在fork

出子进程后就先于子进程exit退出了,所以它是一个有init继承的孤儿进程。守护进程的名称通常以d结尾,比如sshd,xinetd等

创建守护进程的步骤:

编写守护进程的一般步骤:

(1)在父进程中执行fork并exit退出

(2)在父进程中调用setsid函数创建新的会话

(3)在子进程中调用chdir函数,让根目录"/"成为子进程的工作目录

(4)在子进程中调用umask函数,设置进程的umask为0

(5)在子进程中关闭任何不需要的文件描述符

堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏最好平均时间复杂度为O(nlogn),它是不稳定排序。

操作系统进程调度方法:1.先来先服务 2.短作业优先 3.最短剩余时间 4.时间片轮转 5.最高响应比优先 6.公平共享调度

避免死锁算法1:

有序资源分配法

这种算法资源按某种规则系统中的所有资源统一编号(例如打印机为1、磁带机为2、磁盘为3等等),申请时必须以上升的次序。系统要求申请进程:

1、对它所必须使用的而且属于同一类的所有资源,必须一次申请完;

2、在申请不同类资源时,必须按各类设备的编号依次申请。

例如:

进程PA,使用资源的顺序是R1,R2;

进程PB,使用资源的顺序是R2,R1;

若采用动态分配有可能形成环路条件,造成死锁。

采用有序资源分配法:R1的编号为1,R2的编号为2;

PA:申请次序应是:R1,R2

PB:申请次序应是:R1,R2

这样就破坏了环路条件,避免了死锁的发生。

避免死锁算法2:

银行算法

避免死锁算法中最有代表性的算法是DijkstraE.W于1968年提出的银行家算法:

该算法需要检查申请者对资源的最大需求量,如果系统现存的各类资源可以满足申请者的请求,就满足申请者的请求。

这样申请者就可很快完成其计算,然后释放它占用的资源,从而保证了系统中的所有进程都能完成,所以可避免死锁的发生。

内碎片和外碎片,linux内存管理

相关文章

  • 常见知识

    #define print(x) printf(”the no, ”#x”,is ”) 这里主要是两个语法。 一是...

  • 常见知识

    iOS中Runloop是什么,和线程有什么关系? 知识链接 TCP/IP建立连接和断开连接的图解? 知识链接 Ht...

  • ReactNative面试常见问题

    一、JS基础知识 1、常见知识2、Webpack知识点 二、ReactNative知识点 1、常见知识2、Flat...

  • 前端基础知识点

    1.html常见知识点 2.css常见知识点 3.js常见知识点 数组知识点 4.计算机网络知识点 5.数据结构 ...

  • iOS 常见知识点(一):Runtime

    iOS 常见知识点(二):RunLoop iOS 常见知识点(三):Lock Runtime Runtime 是一...

  • ImageView 常见知识

    作用 ImageView,图像视图,直接继承自View类,它的主要功能是用于显示图片,实际上它不仅仅可以用来显示图...

  • js常见知识

    - 页面一加载就执行的函数: - 页面定时器 - onkeyup事件,可以禁止前后输入空格,不禁止中间输入空格,怎...

  • PMP(二十四)

    知识管理误区 一个常见的误解是,知识管理知识将知识记录下来用于分享;另一种常见误解是,知识管理只是在项目结束时总结...

  • 你需要掌握的网络基础(一)

    一、网络链路知识 1.双绞线知识基础 常见双绞线(网线)分类: 常见的双绞线(网线)主要分为:五类、超五类、六类、...

  • 常见基础知识

    一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...

网友评论

      本文标题:常见知识

      本文链接:https://www.haomeiwen.com/subject/nsnbhftx.html