linux笔记

1.输出信息到显示器的三种方法

#include<stdio.h>
#include<string.h>
int main()
{
   const char*msg="hello fwrite\n";
   fwrite(msg,strlen(msg),1,stdout);
   printf("hello printf\n");
   fprintf(stdout,"hello fprintf\n");
   return 0;
}

运行结果:
这里写图片描述

2.解引用空指针
代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int *p=NULL;
    *p=20;
    printf("p=%d\n",*p);
    return 0;
}

运行结果:
这里写图片描述
结果解析:程序运行结果是段错误

解引用空指针会有三种结果:

1.会使程序结束
2.进程收到信号会异常终止
3.会产生段错误

段错误(MMU异常)—->非法访问内存

MMU发现虚拟地址空间错误或此虚拟地址空间没有权限访问,此时MMU就会报告给操作系统内核,由操作系统给进程发送11号信号

3.线程中,栈上开辟的空间和全局变量的不同

(1)栈上
代码:

#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
void*ThreadEnter(void*arg)
{
    char*ID=(char*)arg;
    int count=0;
    while(1)
    {
        count++;
        if(count>6)
            pthread_exit(NULL);
        printf("count=%d,ID=%s\n",count,ID);
        sleep(1);
    }
}
int main()
{
    pthread_t tid1,tid2;
    pthread_create(&tid1,NULL,ThreadEnter,"thread1");
    pthread_create(&tid2,NULL,ThreadEnter,"thread2");
    pthread_join(tid1,NULL);
    pthread_join(tid2,NULL);
    return 0;
}

运行结果
这里写图片描述
(2)全局
代码

#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
int count=0;
void*ThreadEnter(void*arg)
{
    char*ID=(char*)arg;
    while(1)
    {
        count++;
        if(count>6)
            pthread_exit(NULL);
        printf("count=%d,ID=%s\n",count,ID);
        sleep(1);
    }
}
int main()
{
    pthread_t tid1,tid2;
    pthread_create(&tid1,NULL,ThreadEnter,"thread1");
    pthread_create(&tid2,NULL,ThreadEnter,"thread2");
    pthread_join(tid1,NULL);
    pthread_join(tid2,NULL);
    return 0;
}

运行结果:
这里写图片描述
两次运行结果的解析:
变量定义到入口函数中成为栈上的变量了. 每个线程有自己独立的栈

执行结果的不一样,虽然这两个线程是同一个入口函数,但是如果是栈上的话,两个线程都拿到了变量count的初始值,都开始自己的count++,所以两个线程都是从0开始++,同时输出count=1,如果是全局的话,某一个线程把count的初始值拿到之后变为count=1,另一个线程因为共享同一虚拟地址空间,只能从1开始count++

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值