![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式编程
长着翅膀的乌龟
it从业者,爱好者。
展开
-
信号二
信号的几种状态抵达:表示一个信号到达,要处理的信号。阻塞:表示当信号到达时使信号阻塞,当解除阻塞时再处理信号,阻塞和忽略信号是不同的,忽略是将信号丢弃。未决:表示当将一个信号设置为阻塞时,当这个信号到达时这个信号便是未决的,表示还没有被处理的信号。sigset_t类型sigset_t是一种表示信号的数据类型,使用一位表示一种信号,我们常常使用下面函数进行操纵这个数据类型的数据。...原创 2019-08-11 08:17:55 · 264 阅读 · 0 评论 -
线程基本操作
函数原型#include <pthread.h>int pthread_create(pthread_t *restrict thread,const pthread_attr_t *restrict attr,void *(start_routine)(void), void *restrict arg);创建线程的函数有四个参数,第一个参数是一个pthread_t类型的指...原创 2019-08-10 05:07:57 · 129 阅读 · 0 评论 -
标准I/O库
文件的操作文件的基本操作通常有读写增加操作,我们使用C语言的标准库来对文件进行操作使用fopen函数进行打开文件,打开文件操作实际上操作系统会为这个文件分配资源,为文件分配文件描述符和I/O缓冲区等资源。使用fclose函数来进行关闭文件,这两个是成对使用的,如果没有关闭文件在进程执行完毕时也会自动关闭文件,但是如果是一个长期运行的进程,如果打开过多的文件,会占用很多的资源,因此这两个函数要成对...原创 2019-08-10 05:08:54 · 163 阅读 · 0 评论 -
系统数据文件和信息
作用linux系统的运行需要大量的系统文件的信息,比如/etc/passwd,/etc/shadow和/ets/group等系统文件信息。用户的每次操作都会涉及到这些文件的信息,比如我们使用ls -l命令,便会使用到相应的信息。passwd结构这个结构在<pwd.h>中定义,这个结构的成员有:char *pw_namechar *pw_passwduid_t *pw_uid...原创 2019-08-10 05:09:58 · 485 阅读 · 0 评论 -
进程环境
main函数进程的执行是从main函数开始的,下面介绍一下main函数的原型。int main(int argc,char *argv[])可以看到main函数是有两个参数的,这两个参数可以从终端进行传递,第一参数表示传入参数的个数,第二个参数表示传入的参数,存入这个数组里。进程的终止进程终止的方式有八种,五种为正常终止从main函数返回调用exit函数调用_exit或-Exit函...原创 2019-08-10 05:10:59 · 128 阅读 · 0 评论 -
进程控制一
进程标识每个进程都有一个非负的整数表示一个进程的id,这个id是唯一的,来标识一个进程,但是id是可重用的,当一个进程结束后,另外一个进程便可以使用这个id。通常情况下,id为0的进程是调度进程也被称为系统进程,id为1的是init进程,这个进程读取系统初始化文件。除了进程id,每个进程还有其他的id。#include<unistd.h>pid_t getpid(void) ...原创 2019-08-10 05:12:00 · 90 阅读 · 0 评论 -
信号一
信号的产生当用户按终端的某些建时会产生信号,比如当用户按delet或者ctrl+c时产生SIGINT信号,默认动作是中断这个进程。硬件异常产生信号:除数为0或者无效的内存引用等。进程调用kill函数将任意信号发送给另一个进程或进程组,但是发送信号的进程必须和接受信号的用户相同或者发送信号的所有者必须是超级用户。信号的处理动作:忽略信号,大多数信号都是这种处理动作,但是SIGKILL和SI...原创 2019-08-10 05:12:57 · 143 阅读 · 0 评论 -
文件和目录一
stat函数int stat(const char *restrict *pathname,struct stat * restrict buf)int fstat(int fd,struct stat *buf)int lstat(const char *restrict *pathname,struct stat * restrict buf)这几个函数用来获取文件后者目录的基本信息,...原创 2019-08-10 05:13:48 · 152 阅读 · 0 评论 -
进程控制二
函数exec函数介绍int execl(const char pathname,const char arg0 ,…/ (char)0 */)int execv(const char *pathname,char *const argv[])int execle(const char pathname,const char arg0 ,…/ (char)0,char *const en...原创 2019-08-10 05:14:41 · 94 阅读 · 0 评论 -
getopt函数使用
函数原型#include<getopt.h>getopt(int argc,char *argv,char *str);这个函数的作用和main(argc,argv)相似来接收终端传递来的参数,不过这个函数比main函数有更大的优点,通常传递参数和值的时候使用这个比如 "-a 6 -t 7"这种类型的参数。这个函数的第一个和第二个参数都是从main函数中得到的参数,第三个参数...原创 2019-08-28 20:41:12 · 1465 阅读 · 1 评论 -
linux下编译器的使用
源文件编译的过程使用C语言编写一段程序称之为源程序,这个程序是不能直接执行的,需要编译成可执行代码,过程:源程序->预处理->编译->汇编->汇编->链接->可执行代码。拿到一个源程序首先需要进行预处理,预处理的结果便是将头文件的内容放入这个文件中,比如一个C语言程序通常需要包含stdio.h头文件,这个头文件里包含一些函数和变量的声明,预处理便会将这个文...原创 2019-09-05 22:22:17 · 476 阅读 · 0 评论 -
线程创建和互斥
线程的基本概念我们知道进程是计算机分配资源的基本单位,计算机会为一个进程分配内存空间和cpu的时间片等资源,而线程则是比进程更小的单位,一个进程可以包含几个线程,其中一个为主线程,在一个进程内的线程中内存资源是共享的,因此在一个进程中的全局变量每个线程都可以访问的,但是每个线程的运行顺序我们是不可控的,因此当几个线程同时访问一个全局变量时便会出现问题,接下来我来贴下一段代码。代码#inclu...原创 2019-08-10 05:05:34 · 132 阅读 · 0 评论 -
linux无缓冲区的I/O操作
文件描述符文件描述符是一个非负的小整数,当我们创建或者打开文件时,内核便会返回一个文件描述符,来标识这个打开或者创建的文件。标准输入,标准输出,标准错误当我们开启一个进程时会自动打开这三个描述符,STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO这三个宏定义的描述符分别为0,1,2。这些通常是在unistd.h中定义的。我们可以通过这些描述符进行从终端来进...原创 2019-08-07 19:40:47 · 998 阅读 · 0 评论 -
linux C操作sqlite3
sqlite3_open函数原型int sqlite3_open(char *filename,sqlite3 **db);首先介绍sqlite3类型,这个类型是一个表示打开的数据库句柄,函数的作用是打开一个数据库,并将数据库的句柄赋值给db,当数据库不存在时会自动创建一个新的数据库。通常的使用方式:sqlite3 *db;char *filename="db.db"sqlite3...原创 2019-09-08 11:46:50 · 660 阅读 · 0 评论