Linux下的C(长期贴)

来源:互联网 发布:flashfxp mac 中文 编辑:程序博客网 时间:2024/05/16 18:52

Linux基本命令及文件组织结构:

1、组织结构    Linux:犹如一颗倒置的树,所有文件存在根目录下(/)    Windows:所有文件存在于盘符中("E"……)2、基本命令    1、打开命令终端:(Ctrl Alt T)    farsight@ubuntu:~$(用户名@主机名    :与$之间当前所处路径)    2、pwd:查看当前所在路径    eg:略    3、ls:        ls [目录路径] //列出目录路径下的内容,不指定则当前目录        ls -l [目录路径]//将指定目录路径下的内容以列表形式列出        ls -a [目录路径]//将指定目录路径下的所有内容列出    clear或(ctrl L):清屏    4、cd:目录切换(接绝对路径和相对路径)        相对路径:相对于当前目录路径的路径        绝对路径:以根开始的路径    cd ..:回到上一级目录    cd ~或cd:回到farsight目录    cd:-回到上一次的工作目录    5、目录的创建及删除        创建:mkdir + 名字        删除:rm -r + 目录名    6、文件的创建及删除        创建:touch + 文件名              gedit + 文件名 &              vi + 文件名          三种模式            命令行模式:                        Nyy:连续N行的复制                        P/p:粘贴                        Ndd:连续N行的剪切                        U/u:撤销            插入模式:i            底行模式:   :wq 保存退出                         :w 保存不退出)                        :q 退出未修改文件                        :q! 强制退出                        :set [no]number 设置/取消行号                        :行号 光标定位到指定行        删除命令:rm            rm 文件名    7、文件的拷贝        用法:            cp + 源文件 + 目标目录/文件    8、文件的移动        用法:            mv + 源文件 + 目标目录            mv + 源文件 + 目标文件//更改文件名3、编译器gcc + 编译文件名 [-o 指定文件名]

C语言变量

基本知识
1、变量说明形式:    存储类型 数据类型 变量名:    存储类型:auto(默认) static(静态存储)extern(声明一个外部的全局变量)register(寄存器存储)    数据类型:(32bit)        基本类型:            整形:int(4byte) short(2byte) long(4byte)            浮点型:float(4byte) double(8byte)            字符型:char(1byte)        构造数据类型:            enum(枚举)            struct            union        数组        指针        void(1.用来说明函数无返回值;2.说明指针是不确定数据类型的指针)    变量名:符合命名规则(由一个或多个字母数字下划线组成;不能以数字开头;不与关键字同名)    关键字:(32个)        数据类型:int……enum、struct、union、void//10        存储类型:auto、static、extern、register、signed、unsigned        控制语句:if else、switch case default break continue for do while goto        其他:typedef return sizeof(变量或数据类型) volatile const 2、控制语句    顺序;    分支:简单形式、阶梯形式、嵌套形式    循环:
数组
1、数组    说明形式    数据类型 数组名[元素个数]    说明:数组名是数组首元素的地址,是地址常量,不能做左值    数组在内存中占字节数 = sizeof();2、初始化    数据类型 数组名[元素个数] = {初值}3、各个元素的地址    a+i//第i个元素的地址练习:    数组逆序、封装函数    冒泡排序2、一维字符数组    char 数组名[元素个数]    eg:char ch[] = {};        char ch[] = "";//会自动在末尾添加"\0"3、字符串操作函数(很多,包括分割字符串等实用函数)    strlen()、    strcpy()    strcmp()    strcat()
指针
一、指针指针:内存单元的地址指针变量:保存变量地址的变量说明形式:数据类型 *指针变量名初始化数据类型 *指针变量名 = 地址值&和*&:取变量地址*:取地址处的内容运算算术运算    p+n:向地址大的方向偏移n个数据类型    p-q:两指针之间相差的数据类型个数关系运算    == != > <赋值运算    =  +=二、指针与数组第i个元素地址 a+i p+i &a[i]第i个元素:a[i] p[i] *(p+i) *(a+i)常量区和栈区三、多级指针四、二维数组1、说明形式数据类型 数组名[行数][列数]2、初始化按行初始化    int a[2][3] = {{1,2,3},{1,2,3}}    int a[2][3] = {1,2,3,4,5,6}五、数组指针(行指针)说明形式    数据类型 (*数组指针名)[常量表达式];本质:是指针,指针指向的是一个数组    int a[2][3]    int (*p)[3] = a    *(*(p+i)+j)//一层一层取地址再取值;六、指针数组本质:是数组,数组中各元素是指针说明形式:数据类型 *指针数组名[元素个数];int *p[5];char *ch[5] = {"red","green","blue","yellow","white"};ch[0] = "red";(不能通过指针对内容改变)
函数
不赘述需要注意几点:    局部变量不能作为返回值;修改外部变量(非全局),传递的参数为指针才可在函数内部对变量进行真实的修改(学好指针很重要)    指针函数:返回值是指针的函数,形如int *fun(参数列表){return 一个int型指针;}    函数指针:指针指向函数,形如int (*fun)(参数列表);使用方法见下   
int maxint a,int b){return a};int (*fun)(int,int);//声明指针不实现void main(){    fun = max;//tips函数名可直接作地址<=>&函数名    fun(1,2);}
结构体(struct)和共用体(union)
文件:一组相关数据的有序集合
分类(bcd-lsp)-:普通文件(ASCII文本文件, 二进制文件)d:目录文件l:符号链接文件(相似与快捷方式)c:字符设备文件()b:块设备文件p:管道文件(进程间通信的一种方式)s:套接字文件操作open()    #include <sys/types.h>    #include <sys/stat.h>    #include <fcntl.h>    int open(const char *pathname, int flags);    函数参数:        pathname:指定打开文件的路径名的首地址        flags:打开文件的方式 O_RDONLY ……(3)    函数功能:        打开pathname指定文件    返回值        成功:文件描述符        失败:-1,保存在errno中,通过函数perror()查看        0:标准输入        1:标准输出        2:标准错误输出    int open(const char *pathname, int flags, mode_t mode)    打开pathname指定文件,此文件可以是不存在的文件    mode:文件的权限  ————  一般是八进制数表示    0777(自己,文件所属组,其他文件)read()    #include <unistd>    ssize_t read(int fd, void *buf, size_t count);    函数参数:        fd:open()的返回值        buf:保存从fd中读取的内容的首地址        count:指定从fd中读取内容的字节数    功能:        指定从fd中读取count个字节,并且将读取的内容保存在buf指定的数组中    返回值:        成功;实际读取的字节数        0:读到文件末尾        错误 :-1,保存到perror()查看;write()    #include <unistd>    ssize_t write(int fd, void *buf, size_t count);    函数参数:        fd:open()的返回值        buf:要写入fd中内容的首地址        count:指定从fd中写入的字节数    功能:        指定从buf指向的数组中的count个字节写入fd中    返回值:        成功;实际写入fd中的的字节数        0:没有写入内容到fd        错误 :-1,保存到perror()查看;
进程:正在运行的程序(command ps)
注意:每个进程都有自己独立的地址空间线程:共享同一个进程的地址空间的多个任务一个进程中的多个线程共享以下资源    可执行指令    静态数据    进程中的文件描述符    信号处理函数    当前工作目录    用户ID    用户组ID线程的私有资源    线程ID    PC和相关寄存器    堆栈    局部变量    返回地址    错误号    信号掩码和优先级    执行状态和属性……(3)#include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr,                      void *(*start_routine) (void *), void *arg);参数:    thread:保存线程ID的变量地址    attr:线程属性 通常NULL    start_routine:函数指针 只需传线程函数名即可    arg:线程函数的参数返回值:    0:成功    错误号:……注:编译时链接 -lpthread。#include <pthread.h>int pthread_join(pthread_t thread, void **retval);int pthread_exit(void *retval);