目录
成都创新互联公司是一家专注于成都网站制作、成都网站建设与策划设计,铁东网站建设哪家好?成都创新互联公司做网站,专注于网站建设10年,网设计领域的专业建站公司;建站业务涵盖:铁东等地区。铁东做网站价格咨询:189808205752023.1.4 C语言
2023.1.5 C语言
2023.1.6 Linux函数 write.c open.c cp.c fopen.c fread.c fputs.c
2023.1.7 Makefile fork.c
2023.1.9 Makefile
2023.1.10 git操作
2023.1.11 pipe.c mkfifio,c mkpipe.c msg.c msg_tx.c msg_rx.c
2023.1.12 msg_service.c msg_client.c shm.c my_ipcrm,c shm_tx.c shm_rx.c kill.c
2023.1.13 sem.c pv.c
2023.1.16 pthread.c pthread_exit.c pthread_uncle.c
2023.1.17 条件变量 信号量pthread_cond.c shell socket_tcp.c
2023.1.18 socket_tcp.c client.c 一个客户端一个服务端
yy p复制粘贴
cd目录
diff比较,cp之后,diff test1.c test2.c touch建文件 ctrl+c退出死
缓存:用户——库缓存——内核 >>>>>>>>>加\n调用库缓存 四种:\n 内存满了 调用了系统函数 fflush:刷新缓存,将用户缓存写到内核缓存 stderr无缓存 stdout直接写
FILE数据流
2023.1.4 C语言register 尽量将变量限制在寄存器,访问迅速
const 修饰只读变量
n%m ==>> [0 ~ m-1]可以用来求数
if() while() ()里面非0都是真
<<左移是乘法 m<<1 m*2 m< >>右移 -1负数右移永远不会变成空 11111111(补码) 当成-1 A|1=1 A&0=0 a | (0x1< *p 指针变量 char *p 一次读一个字节 int *p一次读四个字节 这个数据类型就是指针读取方法 &a取地址,门牌号的最小值,最小地址 char *p 一看就想到字符串 const char *p 字符串 指针变量,指向不同地址但是里面内容不可以变化,只读 char *p当成const char *p char * const p 指向固定地址,内容可以变化 硬件资源 const char * const p 地址不能变,内容不能变 结构体指针 静态链表,都有一个指针指向下一个,例如:struct stu a,b,c,*head head = &a; head = head->next; a.next=&b; b.next=&c; 动态链表,p1在前面走,p2在后面追,p1到后面之后,将p2的next指向p1,p2是连接前后的作用 cp -l test1 test4 硬连接 ls -il索引结点号是一样的 原文件没了依然保留数据 cp -s test1 test5 软连接 索引结点号不同 原文件没了就没了 ls -l test1 grep -v t test1 在test1中搜索与t不匹配的 grep [tf] test1,正则表达式,搜索包含t和f的字符串 gzip gunzip gzcat压缩相关 gcc -c hello.c 编译生成hello.o文件 Open: fd = open( “ mm ”, O_RDONLY | O_CREAT,0755)//只读,没有就创建,-1失败,其他成功,权限 Close:close(fd) perror(“why”)随便写,打印出来 strcpy ( writebuff , test ) ,字符串复制,将test复制到writebuff write( fd , &writebuff[0] , 11)文件描述符,首地址,数据长度,写的是内存,char *p 首地址就是p,字符串长度就是strlen(str); 字符串有\0多加一位 write read ,往fd所指的里面写,从fd所指的里面读 ,read返回值是读取的字节数 open(O_APPEND) 和 lseek(SEEK_END)光标移到最后 lseek可以负数 argc 有多少参数 , argv 字符串数组 ndd,删除光标下几行 数组初始化:memset(buffer , 0 ,128);初始化空间,将已经开辟的buffer的128个空间赋为0 标准IO可移植性强于文件IO,fopen是标准IO 头文件stdio.h FILE类型的指针fp fread(readbuff , 4,2,fp)将fp对应的东西读到readbuff去 fwrite(writebuff, 4,1,fp)将writebuff里面东西写到fp对应里面 fgets 读,会将\n一起读入,gets不会 fp文件标识符,文件指针,fp当成一个代号,指代一个东西 fprintf(fp,xxxxxxxx),将xxxxx写到fp指代的文件里面 sprintf(buf , "xxxx")将xxxx字符串写到buf里面 静态库,首先将.c编译成.o,再将.o 通过ar cr编译成libxxx.a,gcc hello.c -o hello ./libtest.a 生成执行文件a.out ,再执行./hello可以验证 动态库,gcc -shared -fPIC -o libtest.so test.c,将.c编译成.so加-shared -fPIC 比如sub求和是一个库,调用它,就是自建.h头文件 makefile,第一个目标文件是最终目标 .i --->.s ---> .o ---> 可执行文件 gcc -c xxxx.c -o xxxx.o 汇编 .PHONY: 定义伪目标关键字 := 恒等于 %.c %.o代表任意的.c .o *.c *.o所有的.c .o $@所有的目标文件,$^所有的依赖文件 父子进程执行fork的不同代码段 ps aux | grep xxx kill -l 提交到版本库 git status 暂存区状态 git add xxxx.xx(没有就touch创建文件,然后vi文件写入东西) git commit -m "备注" 把暂存区的改动提交到库里面 git push origin master 同步文件到云库(推送) git init 初始化 git remote add origin 加网址 git push origin master 推送上去 git fetch从远程拉取代码 git fetch+git merge = git pull git branch 有*master *代表目前处于的分支 ~home目录 . 当前目录 ..上级目录 Remote是远程仓库,Repository是本地仓库,workspace是自己的项目工作区,在工作区的项目进行add(添加)、commit(提交)、push(发送)等操作至远程仓库,若有新更新的内容,需要在push之前先从远程仓库pull(拉)下来 更新的内容,再进行push到远程仓库 。 git add -A 保存所有的修改 僵尸进程,用wait waitpid阻塞,等待子进程 dup2(oldfd,newfd) 将oldfd内容重定向到newfd,就是把oldfd的指向复制一份到newfd(原来newid指向的文件被关闭),如此一来,再向newfd写输入就如同向oldfd写输入一样了。 exit(0) 默认0表示正常退出 ipcs -q查看消息队列 system(ipcs -q)系统函数,在运行时自动运行ipcs -q route 命令用于显示和操作IP路由表; rx tx进程间通信 %3d表示取三位整数; ipcs是Linux下显示进程间通信设施状态 ipcs -m,显示活动的共享内存信息 ipcm 删除ipc(清除共享内存信息) stdin标准输入,从键盘输入 extern void *memcpy(void *dest, void *src, unsigned int count); 由src所指内存区域复制count个字节到dest所指内存区域 C 库函数 int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。 如果返回值< 0,则表示 str1 小于 str2。 如果返回值 >0,则表示 str2 小于 str1。 如果返回值 = 0,则表示 str1 等于 str2。 atoi把字符串转换为整数 ii=atoi("123abc"); printf("ii=%d\n",ii); // 输出ii=123,合法数字后的abc被忽略。 建立IPC通讯,需要指定一个id找到对应的消息队列、共享内存,成功就返回一个key_t值,就是两者拴在一起的纽带,ftok ./a.out a b argv[]就有三个,参数,argc是参数个数 argv[0]就是./a.out argv[1]就是a argv[2]就是b 参数个数包括程序名本身,argv数组也包含程序名并将它作为第一个元素,其中argc是程序参数的个数,argv是一个代表参数自身的字符串数组 pid_t wait(int* wstatus); 若不关心进程的结束状态(结束原因)时,可以传NULL进去! alarm函数,alarm(7)倒计时7秒,这7秒执行主函数,signa(14,myfun); 7秒到了之后执行myfun函数,再回到主函数 ipcs ipcs -a :显示全部可以显示的信息 all ipcs -q:显示活动的消息队列信息 queue ipcs -m:显示活动的共享内存信息 memory share ipcs -s:显示活动的信号量信息 semget ipcrm -m id:删除共享内存标识 ipcrm -q id :删除消息队列标识 id和其相关的消息队列和数据结构 ipcrm -s id:删除信号标识符id和其相关的信号量集及数据结构 ipcrm -M key:删除由关键字创建的共享内存标识 ipcrm -Q key:删除由关键字key创建的消息队列和其相关的消息队列和数据结构 ipcs -S key:删除由关键字key创建的信号量标识及其相关的信号量集及数据结构 ftok(把一个已存在的路径名和一个整数标识符转换成IPC键值,key) malloc申请完内存后要判断是否成功 常量==,在等号前面 进程杀死自己:exit(1); kill(getpid(),SIGKILL); raise(SIGKILL) 守护进程,fork父亲死,子进程创建会话操作,pid_t setid(void); chomd a+x g+w 所有+可执行 组内+可写 a代表所有用户; g代表同组用户; o代表其他用户; rm -i:进行任何删除操作前必须先确认。 alias rm='rm-i' 用后面的名字代替前面的名字 ln(link files)命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接 普通用户的标识符为:$ root用户的标识符为:# (int *)ptr强制转化,是个地址,*(int *)ptr取地址 线程的回调函数看一下 线程分离属性,1.初始化 2.设置参数 3.在创建中让它自带分离属性 互斥锁:让访问变成串行,同时只有一个线程可以访问,假如p可以,赋值q=p,则q不能访问 原子操作就是: 不可中断的一个或者一系列操作, 也就是不会被线程调度机制打断的操作 读写锁,读的时候锁起来,写的时候锁起来,写的优先级更高,读的时候可以加锁,写的时候独占,读写锁: 逗号运算符返回值是最后的表达式的值 printf("%3.10s\n",a); //这里m虽然取值为3,但是n的值大于m,所以取值n,保证n个字符输出 printf("%12.3s\n",a); //输出" myn"注意,n取的是元素个数,不包括空格链接 A:ls是list的缩写,用来显示当前目录下面文件的信息; B:df是disk free的缩写,用来显示文件系统中不同磁盘的使用情况; C:du是disk usage的缩写,显示当前目录或者当前文件的占用的块大小; D:find命令作用在目录下,用来查找指定目录或者当前目录下的文件。 rand()%1000;//0-999 注意结构体数组要在定义时就直接初始化 对于未初始化的数据如果是数值型,则会自动赋值为0,对于字符型,会自动赋初值为NULL 如果是数组: struct Student stu[10]; 就是 memset(stu,0,sizeof(struct Student)*10); pthread_cond_wait , 将已经上锁的mutex解锁该函数解除阻塞,对互斥锁加锁 信号量:消费者阻塞,生产者生产减减给消费者使用资源,消费者再返还资源给生产者,加加 # Shell常见的变量之一系统变量,主要是用于对参数判断和命令返回值判断时使用,系统变量详解如下: $0 当前脚本的名称; perror ( )用 来 将 上 一 个 函 数 发 生 错 误 的 原 因 输 出 到 标 准 设备 (stderr) 。 TCP服务端,先建立socket,再bind绑定信息,然后listen监听,再accept接收,最后recv,接收读写数据 你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧struct stu
{
int num;
char *name;//字符串
}boy1 = { };
struct stu *pst;
pst = &boy1;
printf( , boy1.num boy1.name);
(*pst).num (*pst).name;
pst->num pst->name;//三种都可以
gcc -o hello hello.c 生成可执行文件hello 或者 gcc hello.c -o hello.PHONY:
clear:
rm -rf xxx
TAR = test
OBJ = circle.o cube.o
CC := gcc
test : circle.o cube.o
gcc -c circle.o cube.o -o test
//替换
$(TAR) :$(OBJ )
$(CC) -c $(OBJ ) -o $(TAR )
%.c :%.o
$(CC) -c %.c -o %.o
git add . 保存新的添加和修改,但是不包括删除
git add -u 保存修改和删除,但是不包括新建文件tar
-zcvf 目标文件 源文件
z表示使用
gzip
压缩
j表示使用
bzip2
压缩
c表示压缩
x表示解压缩
2023.1.17 条件变量 信号量pthread_cond.c shell socket_tcp.c
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
$n 当前脚本的第n个参数,n=1,2,…9;
$* 当前脚本的所有参数(不包括程序本身);
$# 当前脚本的参数个数(不包括程序本身);
$? 令或程序执行完后的状态,返回0表示执行成功;
$$ 程序本身的PID号。
文章名称:Linux指令学习-创新互联
文章路径:http://cxhlcq.com/article/jpdps.html