Linux学习阶段性总结

一、linux基础

  最近学linux下的C编程,就又从新装了Fedora。学过就是好捡,在总结一下熟悉的知识点吧,看看有没有不会的。

1、linux系统相关知识:linux是个开源的系统,有不同的版本,安装在\ 目录下,存储格式为ext3。

2、文件管理命令:进入、退出、建立、删除、查看、更改文件

3、VI编辑器:yy复制、p粘贴、:wq退出、a后移一位输入、i当前位输入

4、基本指令:  linux 指令熟悉

who 察看有谁登陆,以及控制终端号。

tar -cvf a.tar.gz photoes  将photoes 打包为a.tar.gz 

tar -xvf  a.tar.gz  把文件解压到当前目录下

sync 数据同步写入磁盘。

chattr +i a 赋予a隐藏属性,使a不可删除与更改。去掉的方法 chattr -i a。lsattr显示文件的隐藏属性。

top 动态显示变化的进程。

 

5、用户和权限管理:  Linux 添加用户 ,帐号管理 ,群组管理 详解

所有用户的ID都存放在/etc/passwd 中 例如 

    fsy:x:500:500:Fedora:/home/fsy:/bin/bash

    信息内容依次为:用户名、密码(一个形式)、UID(UID为0时为root权限)、GID、用户信息说明栏、家目录、Shell。用户登陆的过程是这样的:首先在/etc/passwd中寻找是否有相应的帐号,如果没有则跳出,如果有的话则将该账号对应的UID 与GID 读出来,另外,该账号的家目录与shell 设定也一并读出。然后核对在/etc/shadow对应帐号的密码。最终进入shall。shadow的文件内容是这样:

fsy:$1$giEMo6.Y$rY2i/S7K2UXHTvxJ.VuEL.:15201:0:99999:7:::

   其中前两项为帐户名和密码。

useradd 添加用户、passwd更改密码、userdel 删除用户、usermod更改用户。

6、SHELL编程:具体参考 shell编程1 shell编程2

unset name 取消变量的定义

$?:命令执行后返回的状态(0为正确执行;非0为出错) 可用于检查上一个命令执行是否正确
$$:当前进程的进程号
$#:位置参数的数量,$1表示第一个自变量
$0:当前执行的进程名
$1-$9:脚本参数
$*:所有位置参数的内容

 

shell中的引号:

1、单引号(‘):单引号括起来的字符(包括特殊字符)都作为普通字符。

2、双引号:由双引号括起来的字符,除$、\、’、和”这几个字符仍是特殊字符并保留其特殊功能,其余字符仍作为普通字符对待。

 [注]:
  $:用其后指定的变量值来代替这个变量
  \:转义字符,其后面的字符为普通字符。通常需要加\的只有4个字符, $、\、’、和”。
  对于”号,如果没加\,则与前一个“号匹配
3、反引号(`):   与键盘上的~同一个键上的符号。反引号括起来的字符串被shell解释为命令行,执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号部分。
二、C  语 言
    sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。其返回值类型为size_t,在头文件stddef.h中定义。在32位系统中:

  char的sizeof值为1,char是我们编程能用的最小数据类型。

        short的sizeof值为2; 

        int、float、long为4;

        double为8;

        所有的指针的sizeof值都为4。

 

char* ss = "0123456789";
sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针
sizeof(*ss) 结果 1 ===》*ss是第一个字符

char ss[] = "0123456789";
sizeof(ss) 结果 11 ===》ss是数组,计算到\0位置,因此是10+1
sizeof(*ss) 结果 1 ===》*ss是第一个字符

char ss[100] = "0123456789";
sizeof(ss) 结果是100 ===》ss表示在内存中的大小 100×1
strlen(ss) 结果是10 ===》strlen是个函数内部实现是用一个循环计算到\0为止之前

int ss[100] = "0123456789";
sizeof(ss) 结果 400 ===》ss表示再内存中的大小 100×4
strlen(ss) 错误 ===》strlen的参数只能是char* 且必须是以''\0''结尾的

char q[]="abc";
char p[]="a\n";
sizeof(q),sizeof(p),strlen(q),strlen(p);
结果是 4 3 3 2
  

 

2、笔试题strcpy写法

        char * strcpy(char * strDest,const char * strSrc)
        {
                if ((strDest==NULL)||(strSrc==NULL))     
                        throw "Invalid argument(s)";              
                char * strDestCopy=strDest;                     
                while ((*strDest++=*strSrc++)!='\0');        
                return strDestCopy;
        }

3、 C语言基础知识

 

        +++的问题。      

        int i =1;
        int j =2;
        int k = i+++j;
        printf("%d" ,k);

     输出k为3。

   编译原理有关编译器在词法解析的时候,对于运算符,总是查找最大的匹配也就是说,i+++j,编译器在找到+的时候,它不立即理解为+而是继续下一个字符,下一个字符仍然是+,可以组成++, 再往下的话便是+++,不成立了。所以i+++j会解析为(i++)+j 。另外i++是后自增,所以k=1+2=3,i再自增。++是所有的都算完了,再增加。


4、类型转换

        unsigned int a =6;
        int b=-20;
        char c;
        (a+b>6)?(c=1):(c=0);
        printf("%d" ,c);

  unsigned int 类型的数据与 int 类型的数据相运算后,自动转化为unsigned int类型。因此 a+b的值不是-14,而是一个unsingned int 类型的数424967382。因此返回值为1。

 

5、a和b比较大小,不许用if、?:、switch 。

         int max=(a + b + abs ( a-b ) ) /2

     a和b交换:

      方案1:

               a=a+b

               b=a-b

               a=a-b

      方案2:

               a=a^b

               b=a^b

               a=a^b

 三、linux系统编程

1、gcc、gdb、makefile 学习和用法

2、通过patch实现生成使用补丁

3、系统调用的方式访问文件

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值