![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux
文章平均质量分 91
记录在Linux环境下编程需要的一些知识
tusdddd
这个作者很懒,什么都没留下…
展开
-
Socket
套接字Socket套接字用于两个进程之间互相通信,与其他所有进程间通信方式不同的是,这两个进程可以分别位于两台不同的用网络连接的计算机。同时,Socket也可以用来连接同一台计算机上的两个进程。套接字使用流程首先,服务器应用会使用Socket()创建一个套接字,它是系统分配给该服务器进程的类似文件描述符的资源,不能与其他进程共享。接下来,服务器进程会给套接字起个名字。本地套接字的名字是Linux文件系统中的文件名,一般放在/tmp或/usr/tmp中。对于网络套接字,它的名字是与客户端连接的特定网络有原创 2021-03-12 17:40:23 · 203 阅读 · 0 评论 -
IPC
进程之间的通信(System V IPC)在系统运行的过程中,常常需要让多个进程互相通信。实现这样功能的方式有很多种,例如文件锁和管道,这里介绍一组由Linux系统提供的机制,称为System V IPC。这一组机制中包含了三种方式,他们分别是信号量,共享内存和消息队列。信号量信号量用来实现系统资源的互斥访问,这里讲的是进程之间的资源互斥访问,线程之间的互斥访问不能使用这样的方式,关于如何使用线程之间的信号量,可以看[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pZE6原创 2021-03-05 17:18:15 · 152 阅读 · 0 评论 -
管道通信
管道通信进程之间可以互相交换数据,其工作方式是通过管道来实现。在Linux环境中,很多时候可以使用管道符|来让不同进程之间通过管道通信。例如命令ls | cat。这个命令使命令ls的标准输出内容通过管道传达给cat命令的标准输入。C标准管道操作C语函数库<stdio.h>中提供了比较高级的函数来打开和关闭管道,它们是:#include <stdio.h>FILE * popen(const char * command, const char * open_mode);i原创 2021-03-03 08:01:47 · 293 阅读 · 0 评论 -
POSIX线程
POSIX线程有时候一个应用程序可能需要同时执行多个任务,但是这几个任务又相互协作,需要共享一些数据。这个时候就适合使用多线程来编写程序。线程是任务粒度划分中比进程更小的单元,两个线程可以属于同一个进程,并且两个线程可以同时执行。因为创建线程的目的只是让程序可以同时做多件事情,所以组成一个线程所需的资源只需要能让他正确执行即可,也就是说一个线程所需的资源是足够自己运行的最少资源。所以创建一个线程所需要的系统开销比创建一个进程小很多,并且由于线程之间共享程序的全局变量,所以线程之间更方便相互协作。基于上面的原创 2021-01-19 15:22:51 · 272 阅读 · 0 评论 -
处理信号
处理信号信号是在程序运行过程中系统突然发生一些特殊事件时,用来通知正在运行的程序的手段。例如当shell中有一个程序正在运行时,用户突然按下了ctrl + C,系统就会想正在运行的程序发送SIGINT信号,该信号表示一个中断。系统用这种方式告诉正在运行的程序,当前正发生的一些事件,便于程序对这些突发时间进行处理。信号的定义在头文件signal.h中,其中常用的有:信号含义SIGABORT进程异常终止SIGALRM超时警告SIGFPE浮点运算异常SIGHUP原创 2020-12-31 20:32:38 · 107 阅读 · 0 评论 -
C语言创建子进程
C语言创建子进程程序运行的时候,可以创建与自己关联的子进程,创建了这个子进程之后,可以选择等待这个子进程执行完毕,也可以让子进程与自己并行执行,还可以终止自己转而执行子进程。这些操作都是通过一系列相似而又有细微区别的库函数来实现。下面对这些可以使用的库函数进行介绍。system()它的函数定义如下:#include <stdlib.h>int system(const char * string);这个进程会在系统中另外启动一个shell,并在新的shell中执行参数string原创 2020-12-29 20:12:16 · 5374 阅读 · 0 评论 -
调试程序
调试程序在Linux环境下编程时,系统提供了调试程序的工具,也可以设置断点,从而查看程序在运行中的状态。Linux下最常用的调试工具就是gdb,此外还有一些另外的调试工具,例如断言和内存调试。用gdb调试程序这里使用一个有问题的排序算法实现来演示用gdb调试程序的过程,其排序算法的代码如下:#include <stdio.h>typedef struct{ //不能使用char * data; char data [4096]; int key;} item;item a原创 2020-12-28 20:01:04 · 365 阅读 · 0 评论 -
Makefile基础
Makefile基础当一个应用程序有很多源文件的时候,因为源文件之间存在互相依赖,所以在编译的时候必须要按照一定的先后顺序来进行。手动编译这些源文件太过繁琐,且容易出错。所以Makefile就是定义了源文件编译行为的文件,有了Makefile文件,在执行make命令的时候,系统就会自动寻找Makefile文件,并按照文件中定义的行为对源文件进行编译。一个Makefile文件由两个主要组成部分,它们分别是目标和规则。目标表示编译过程中的一个编译步骤,通常会生成一个文件,但也有例外。规则则是达到该目标要进行原创 2020-12-27 13:58:13 · 275 阅读 · 0 评论 -
文件锁定
文件锁定当多个进程需要同时操作一个文件的时候,为了互相协调,防止出现文件不一致的情况,就需要使用系统提供的文件锁定特性。创建锁文件创建锁文件的方式类似操作系统中的二进制信号量机制。这个锁文件是一个空文件,它的作用仅仅是作为一个标志,表示当前有一个进程正在使用文件。注意这种机制只是一种建议锁,而不是强制锁。一个应用程序在明知道锁文件存在(有一个进程正在访问文件)的时候还是可以强行访问文件,这种行为不会引起程序异常,但是会使文件混乱。这种进程之间的协调需要程序员来完成。因为这个锁文件是用来控制进程之间原创 2020-12-24 15:21:08 · 246 阅读 · 1 评论 -
文件处理
底层文件访问每个进程都会有一些自己的文件描述符,这些文件描述符表示当前进程正在操作的文件。在一个进程打开一个文件的时候,实际上就是在自己的文件表中创建该文件的文件描述符,创建文件描述符之后,可以通过该描述符对文件进行操作。当一个程序开始运行的时候,一般都会有三个默认存在的文件描述符。他们分别是:0:标准输入1:标准输出2:标准错误write系统调用系统调用write的作用是把缓冲区buf的前nbytes个字节写入与文件描述符fildes关联的文件,并返回实际写入的字节数。如果函数返回0,表原创 2020-12-23 19:39:45 · 187 阅读 · 0 评论 -
选项处理
程序参数当我们用C语言写好一个程序并成功编译出可执行的二进制文件之后,可以通过终端进行调用。并且在调用的时候,通常会传入一些参数,这些传入的参数会被存储到一个字符串数组中,并且该数组会被作为main()函数的参数,以便程序对这些参数进行处理。例如int main(int argc, char *argv[]){ for(int i = 0; i < argc; i++){ printf("%s\n", argv[i]); } return 0;}这个main函数中有两个参数,第一个原创 2020-12-23 13:27:58 · 88 阅读 · 0 评论 -
vim命令
vim命令学习vim的时候找到的一个文档,存一下 Lesson 1 SUMMARY 1. The cursor is moved using either the arrow keys or the hjkl keys. h (left) j (down) k (up) l (right) 2. To start Vim from the shell prompt type: vim FILENAME <ENTER> 3. To原创 2020-12-17 15:12:16 · 219 阅读 · 0 评论 -
ShellProgramming
这个文档用于记录自己在学习shell编程时的一些心得,还有一个示例以及对其的解读,以便日后的查阅。文件基本结构一个完整的shell文件中可能有的部分为:#!/bin/sh,第一行的这个命令告诉系统应该用哪个程序来运行这个shell文件。代码,shell程序将要执行的代码部分注释,注释以#开头,#的后面皆为注释内容shell中的变量在shell中定义变量的格式为:var1="Hello"var2=13代码第一行定义了一个var1变量,并将其赋值为Hello,第二行则定义了一个var2原创 2020-12-21 20:35:55 · 150 阅读 · 0 评论