导航:首页 > 编程系统 > linuxcsignal

linuxcsignal

发布时间:2023-09-05 04:33:52

『壹』 linux环境下C开发_linux搭建c语言开发环境

一:C语言嵌入式Linux工程师的学习需要具备一定的C语言基础,C语言是嵌入式领域最重要也是最主要的编程语言,通过大量编程实例重点理解C语言的基础编程以及高级编程知识。包括:基本数据类型、数组、指针、结构体、链表、文件操作、队列、栈等。

二:Linux基础Linux操作系统的概念、安装方法,详细了解Linux下的目录结构、基本命令、编辑器VI,编译器GCC,调试器GDB和Make项目管理工具,ShellMakefile脚本编写等知识,嵌入式开发环境的搭建。

三:Linux系统编程重点学习标准I/O库,Linux多任务编程中的多进程和多线程,以及进程间通信(pipe、FIFO、消息队列、共享内存、signal、信号量等),同步与互斥对共享资源访问控制等重要知识,主要提升对Linux应用开发的理解和代码调试的能力。

四:Linux网络编程计算机网络在嵌入式Linux系统应用开发过程中使用非常广泛,通过Linux网络发展、TCP/IP协议、socket编程、TCP网络编程、UDP网络编程、Web编程开发等方面入手,全面了解Linux网络应用程序开发。重点学习网络编程相关API,熟练掌握TCP协议服务器的编程方法和并发服务器的实现,了解HTTP协议及其实现方法,熟悉UDP广播、多播的原理及编程方法,掌握混合C/S架构网络通信系统的设计,熟悉HTML,Javascript等Web编程技术及实现方法。

五:数据结构与算法数据结构及算法在嵌入式底层驱动、通信协议、及各种引擎开发中会得到大量应用,对其掌握的好坏直接影响程序的效率、简洁及健壮旅瞎性。此阶段的学习要重点理解数据结构与算法的基础内容,包括顺序表、链表、队列、栈、树、图、哈希表、各种查找排序算法等应用及其C语言实现过程。

六:C、QTC是Linux应用开发主要语言之一,本阶段重点掌握面向对象编程的基本思想以及C的重要内容。图形界面编程是嵌入式开发中非常重要的一个环节。由于QT具有跨平台、面向对象、丰富API、支持2D/3D渲染、支持XML、多国语等强大功能,在嵌入式领域的GUI开发中得到了广范的应用,在本阶段通过基于QT图形库的学习使学员可以熟练编写GUI程序,并移植QT应用程序到Cortex-A8平台。包括IDE使用、QT部件及布局管理器、信息与槽机制的应用、鼠标、键盘及绘图事件处理及文件处理的应用。

七:CortexA8、Linux平台开发通过基于ARMCortex-A8处理s5pv210了解芯片手册的基本阅读技巧,掌握s5pv210系统资源、时钟控制器、电源管理、异常中断控制器、nandflash控制器等模块,为底层平台搭建做好准备。Linux平台包括内核裁减、内核移植、交叉编译、GNU工具使用、内核调试、Bootloader介绍、制作与原理分析、根文件系统制作以及向内核中添加自己的模块,并在s5pv210实验平台上运行自己制作的Linux系统,集成部署Linux系统整个流程。同时了解Android操作系统开发流程。Android系统是基于Linux平台的开源操作系统,该平台由操作系统、中间件、用户界面和应用软件组成,是首个为移动终端打造的真正开放和完整的移动软件,目前它的应用不再局限于移动终端,还包括数据电视、机顶盒、PDA等消费类电子产品。

八:驱动开发拆颤空驱动程序设计是嵌入式Linux开发工作中重要的一部分,也是比较困难的一部分。本阶洞租段的学习要熟悉Linux的内核机制、驱动程序与用户级应用程序的接口,掌握系统对设备的并发操作。熟悉所开发硬件的工作原理,具备ARM硬件接口的基础知识,熟悉ARMCortex-A8处理器s5pv210各资源、掌握Linux设备驱动原理框架,熟悉工程中常见Linux高级字符设备、块设备、网络设备、USB设备等驱动开发,在工作中能独立胜任底层驱动开发。

以上就是列出的关于一名合格嵌入式Linux开发工程师所必学的理论知识,其实,作为一个嵌入式开发人员,专业知识和项目经验同样重要,所以在我们的理论学习中也要有一定的项目实践,锻炼自己的项目开发能力。

『贰』 Linux 环境下的C语言, 关于 kill 发送信号和 signal() 函数, 具体问题在以下代码的注释处

pause()会令目前的进程暂停(进入睡眠状态), 直到被信号(signal)所中断。

当50信号触动了,pause将退出睡眠状态,执行printf和return

『叁』 linux C信号发送和接收sigaction()和pthread_kill()怎么不行呢

1. 默认情况下,信号将由主进程接收处理,就算信号处理函数是由子线程注册的
2. 每个线程均有自己的信号屏蔽字,可以使用sigprocmask函数来屏蔽某个线程对该信号的响应处理,仅留下需要处理该信号的线程来处理指定的信号。
3. 对某个信号处理函数,以程序执行时最后一次注册的处理函数为准,即在所有的线程里,同一个信号在任何线程里对该信号的处理一定相同
4. 可以使用pthread_kill对指定的线程发送信号

APUE的说法:每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有的线程共享的,

这意味着尽管单个线程可以阻止某些信号,但当线程修改了与某个信号相关的处理行为后,所

有的线程都共享这个处理行为的改变。这样如果一个线程选择忽略某个信号,而其他线程可

以恢复信号的默认处理行为,或者为信号设置一个新的处理程序,从而可以撤销上述线程的

信号选择。

进程中的信号是送到单个线程的,如果信号与硬件故障或者计时器超时有关,该型号就被发

送到引起该事件的线程中去,而其他的信号则被发送到任意一个线程。

sigprocmask的行为在多线程的进程中没有定义,线程必须使用pthread_sigmask

总结:一个信号可以被没屏蔽它的任何一个线程处理,但是在一个进程内只有一个多个线程共用的处理函数。

『肆』 linux c 使用alarm SIGALRM信号发送后直接就退出。如何做才能不退出。

一、 使用时钟和定时器(alarm系统调用)

#include <unistd.h>

unsigned alarm(unsigned secs);

/*returns secs left on previous alarm or zero if none */

alarm也称为闹钟函数,它可以在进程中设置一个定时器,当指定的时间到时,它向进程发送SIGALRM信号。需要注意的是,一个进程只能有一个定时器。当报警开始时,会发送一个SIGALRM,子进程继承其父进程的报警时钟值,但实际的时钟并不共享。执行exec后,报警时钟仍然保持其设置。

alarm按照secs指定的秒数来设置时钟,如果secs为0,则关闭报警时钟,这样做是很有必要的,如果recvfrom函数读到数据,没到设定时钟值时就返回了,而你又忘记关闭报警时钟的话,那么它将在不久后报警,在计算机看来,1秒都是一个很漫长的时间,1秒后的报警可能会造成本进程中其他函数执行的中断,因为一个进程只有一个定时器,所以使用完定时器后,一定要关闭定时器。

实例代码:

详细代码

『伍』 请教一个Linux下C语言的进程间的信号问题

linux中的进程通信分为三个部分:低级通信,管道通信和进程间通信IPC(inter process communication)。linux的低级通信主要用来传递进程的控制信号——文件锁和软中断信号机制。linux的进程间通信IPC有三个部分——①信号量,②共享内存和③消息队列。以下是我编写的linux进程通信的C语言实现代码。操作系统为redhat9.0,编辑器为vi,编译器采用gcc。下面所有实现代码均已经通过测试,运行无误。

一.低级通信--信号通信

signal.c

#include
#include
#include

/*捕捉到信号sig之后,执行预先预定的动作函数*/
void sig_alarm(int sig)
{
printf("---the signal received is %d. /n", sig);
signal(SIGINT, SIG_DFL); //SIGINT终端中断信号,SIG_DFL:恢复默认行为,SIN_IGN:忽略信号
}

int main()
{
signal(SIGINT, sig_alarm);//捕捉终端中断信号
while(1)
{
printf("waiting here!/n");
sleep(1);
}
return 0;
}

二.管道通信

pipe.c

#include
#define BUFFER_SIZE 30

int main()
{
int x;
int fd[2];
char buf[BUFFER_SIZE];
char s[BUFFER_SIZE];
pipe(fd);//创建管道
while((x=fork())==-1);//创建管道失败时,进入循环

/*进入子进程,子进程向管道中写入一个字符串*/
if(x==0)
{
sprintf(buf,"This is an example of pipe!/n");
write(fd[1],buf,BUFFER_SIZE);
exit(0);
}

/*进入父进程,父进程从管道的另一端读出刚才写入的字符串*/
else
{
wait(0);//等待子进程结束
read(fd[0],s,BUFFER_SIZE);//读出字符串,并将其储存在char s[]中
printf("%s",s);//打印字符串
}
return 0;
}

三.进程间通信——IPC

①信号量通信

sem.c

#include
#include
#include
#include types.h>
#include ipc.h>
#include sem.h>

/*联合体变量*/
union semun
{
int val; //信号量初始值
struct semid_ds *buf;
unsigned short int *array;
struct seminfo *__buf;
};

/*函数声明,信号量定义*/
static int set_semvalue(void); //设置信号量
static void del_semvalue(void);//删除信号量
static int semaphore_p(void); //执行P操作
static int semaphore_v(void); //执行V操作
static int sem_id; //信号量标识符

int main(int argc, char *argv[])
{
int i;
int pause_time;
char op_char = 'O';
srand((unsigned int)getpid());
sem_id = semget((key_t)1234, 1, 0666 | IPC_CREAT);//创建一个信号量,IPC_CREAT表示创建一个新的信号量

/*如果有参数,设置信号量,修改字符*/
if (argc > 1)
{
if (!set_semvalue())
{
fprintf(stderr, "Failed to initialize semaphore/n");
exit(EXIT_FAILURE);
}
op_char = 'X';
sleep(5);
}
for(i = 0; i < 10; i++)
{

/*执行P操作*/
if (!semaphore_p())
exit(EXIT_FAILURE);
printf("%c", op_char);
fflush(stdout);
pause_time = rand() % 3;
sleep(pause_time);
printf("%c", op_char);
fflush(stdout);

/*执行V操作*/
if (!semaphore_v())
exit(EXIT_FAILURE);
pause_time = rand() % 2;
sleep(pause_time);
}
printf("/n%d - finished/n", getpid());
if (argc > 1)
{
sleep(10);
del_semvalue(); //删除信号量
}
exit(EXIT_SUCCESS);
}

/*设置信号量*/
static int set_semvalue(void)
{
union semun sem_union;
sem_union.val = 1;
if (semctl(sem_id, 0, SETVAL, sem_union) == -1)
return(0);

return(1);
}

/*删除信号量*/
static void del_semvalue(void)
{
union semun sem_union;
if (semctl(sem_id, 0, IPC_RMID, sem_union) == -1)
fprintf(stderr, "Failed to delete semaphore/n");
}

/*执行P操作*/
static int semaphore_p(void)
{
struct sembuf sem_b;
sem_b.sem_num = 0;
sem_b.sem_op = -1; /* P() */
sem_b.sem_flg = SEM_UNDO;
if (semop(sem_id, &sem_b, 1) == -1)
{
fprintf(stderr, "semaphore_p failed/n");
return(0);
}
return(1);
}

/*执行V操作*/
static int semaphore_v(void)
{
struct sembuf sem_b;
sem_b.sem_num = 0;
sem_b.sem_op = 1; /* V() */
sem_b.sem_flg = SEM_UNDO;
if (semop(sem_id, &sem_b, 1) == -1)
{
fprintf(stderr, "semaphore_v failed/n");
return(0);
}
return(1);
}

②消息队列通信

send.c

#include
#include
#include
#include
#include
#include types.h>
#include ipc.h>
#include msg.h>
#define MAX_TEXT 512

/*用于消息收发的结构体--my_msg_type:消息类型,some_text:消息正文*/
struct my_msg_st
{
long int my_msg_type;
char some_text[MAX_TEXT];
};

int main()
{
int running = 1;//程序运行标识符
struct my_msg_st some_data;
int msgid;//消息队列标识符
char buffer[BUFSIZ];

/*创建与接受者相同的消息队列*/
msgid = msgget((key_t)1234, 0666 | IPC_CREAT);
if (msgid == -1)
{
fprintf(stderr, "msgget failed with error: %d/n", errno);
exit(EXIT_FAILURE);
}

/*向消息队列中发送消息*/
while(running)
{
printf("Enter some text: ");
fgets(buffer, BUFSIZ, stdin);
some_data.my_msg_type = 1;
strcpy(some_data.some_text, buffer);
if (msgsnd(msgid, (void *)&some_data, MAX_TEXT, 0) == -1)
{
fprintf(stderr, "msgsnd failed/n");
exit(EXIT_FAILURE);
}
if (strncmp(buffer, "end", 3) == 0)
{
running = 0;
}
}
exit(EXIT_SUCCESS);
}

receive.c

#include
#include
#include
#include
#include
#include types.h>
#include ipc.h>
#include msg.h>

/*用于消息收发的结构体--my_msg_type:消息类型,some_text:消息正文*/
struct my_msg_st
{
long int my_msg_type;
char some_text[BUFSIZ];
};

int main()
{
int running = 1;//程序运行标识符
int msgid; //消息队列标识符
struct my_msg_st some_data;
long int msg_to_receive = 0;//接收消息的类型--0表示msgid队列上的第一个消息

/*创建消息队列*/
msgid = msgget((key_t)1234, 0666 | IPC_CREAT);
if (msgid == -1)
{
fprintf(stderr, "msgget failed with error: %d/n", errno);
exit(EXIT_FAILURE);
}

/*接收消息*/
while(running)
{
if (msgrcv(msgid, (void *)&some_data, BUFSIZ,msg_to_receive, 0) == -1)
{
fprintf(stderr, "msgrcv failed with error: %d/n", errno);
exit(EXIT_FAILURE);
}
printf("You wrote: %s", some_data.some_text);
if (strncmp(some_data.some_text, "end", 3) == 0)
{
running = 0;
}
}

/*删除消息队列*/
if (msgctl(msgid, IPC_RMID, 0) == -1)
{
fprintf(stderr, "msgctl(IPC_RMID) failed/n");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}

③共享内存通信

share.h

#define TEXT_SZ 2048 //申请共享内存大小
struct shared_use_st
{
int written_by_you; //written_by_you为1时表示有数据写入,为0时表示数据已经被消费者提走
char some_text[TEXT_SZ];
};

procer.c

#include
#include
#include
#include
#include types.h>
#include ipc.h>
#include shm.h>
#include "share.h"

int main()
{
int running = 1; //程序运行标志位
void *shared_memory = (void *)0;
struct shared_use_st *shared_stuff;
char buffer[BUFSIZ];
int shmid; //共享内存标识符

/*创建共享内存*/
shmid = shmget((key_t)1234, sizeof(struct shared_use_st), 0666 | IPC_CREAT);
if (shmid == -1)
{
fprintf(stderr, "shmget failed/n");
exit(EXIT_FAILURE);
}

/*将共享内存连接到一个进程的地址空间中*/
shared_memory = shmat(shmid, (void *)0, 0);//指向共享内存第一个字节的指针
if (shared_memory == (void *)-1)
{
fprintf(stderr, "shmat failed/n");
exit(EXIT_FAILURE);
}
printf("Memory attached at %X/n", (int)shared_memory);
shared_stuff = (struct shared_use_st *)shared_memory;

/*生产者写入数据*/
while(running)
{
while(shared_stuff->written_by_you == 1)
{
sleep(1);
printf("waiting for client.../n");
}
printf("Enter some text: ");
fgets(buffer, BUFSIZ, stdin);
strncpy(shared_stuff->some_text, buffer, TEXT_SZ);
shared_stuff->written_by_you = 1;
if (strncmp(buffer, "end", 3) == 0)
{
running = 0;
}
}

/*该函数用来将共享内存从当前进程中分离,仅使得当前进程不再能使用该共享内存*/
if (shmdt(shared_memory) == -1)
{
fprintf(stderr, "shmdt failed/n");
exit(EXIT_FAILURE);
}
printf("procer exit./n");
exit(EXIT_SUCCESS);
}

customer.c

#include
#include
#include
#include
#include types.h>
#include ipc.h>
#include shm.h>
#include "share.h"

int main()
{
int running = 1;//程序运行标志位
void *shared_memory = (void *)0;
struct shared_use_st *shared_stuff;
int shmid; //共享内存标识符
srand((unsigned int)getpid());

/*创建共享内存*/
shmid = shmget((key_t)1234, sizeof(struct shared_use_st), 0666 | IPC_CREAT);
if (shmid == -1)
{
fprintf(stderr, "shmget failed/n");
exit(EXIT_FAILURE);
}

/*将共享内存连接到一个进程的地址空间中*/
shared_memory = shmat(shmid, (void *)0, 0);//指向共享内存第一个字节的指针
if (shared_memory == (void *)-1)
{
fprintf(stderr, "shmat failed/n");
exit(EXIT_FAILURE);
}
printf("Memory attached at %X/n", (int)shared_memory);
shared_stuff = (struct shared_use_st *)shared_memory;
shared_stuff->written_by_you = 0;

/*消费者读取数据*/
while(running)
{
if (shared_stuff->written_by_you)
{
printf("You wrote: %s", shared_stuff->some_text);
sleep( rand() % 4 );
shared_stuff->written_by_you = 0;
if (strncmp(shared_stuff->some_text, "end", 3) == 0)
{
running = 0;
}
}
}

/*该函数用来将共享内存从当前进程中分离,仅使得当前进程不再能使用该共享内存*/
if (shmdt(shared_memory) == -1)
{
fprintf(stderr, "shmdt failed/n");
exit(EXIT_FAILURE);
}

/*将共享内存删除,所有进程均不能再访问该共享内存*/
if (shmctl(shmid, IPC_RMID, 0) == -1)
{
fprintf(stderr, "shmctl(IPC_RMID) failed/n");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}

摘自:

『陆』 Linux C函数实例速查手册的目录

第1章 初级I/O函数
1.1 close函数:关闭已经打开的文件
1.2 creat函数:创建一个文件
1.3 p函数:复制文件描述符
1.4 p2函数:复制文件描述符到指定的位置
1.5 fcntl函数:改变文件的状态
1.6 fsync函数:将缓冲区数据回写到磁盘文件
1.7 Lseek函数:移动文件的读写位置
1.8 open函数:打开一个文件
1.9 read函数:读取文件的数据
1.10 sync函数:将所有打开的文件写回磁盘
1.11 write函数:输出内容到文件
第2章 文件管理操作函数
2.1 access函数:判断进程是否具有访问文件的权限
2.2 alphasort函数:按照字母顺序排序目录结构
2.3 chdir函数:改变当前的工作目录
2.4 chmod函数:改变文件的权限
2.5 chown函数:改变文件的所有者
2.6 chroot函数:改变进程的根目录
2.7 closedir函数:关闭目录文件
2.8 fchdir函数:使用文件描述符改变当前的工作目录
2.9 fchmod函数:改变一个已经打开的文件的权限
2.10 fstat函数:得到一个打开文件的状态
2.11 truncate函数:改变一个打开文件的大小
2.12 ftw函数:遍历目录树
2.13 get_current_dir_name函数:取得当前的工作目录
2.14 getcwd函数:取得进程的当前工作目录
2.15 lchown函数:改变符号链接文件的拥有者
2.16 link函数:建立一个硬链接
2.17 lstat函数:得到符号链接的文件状态
2.18 nftw函数:遍历目录树
2.19 opendir函数:打开目录文件
2.20 readdir函数:读取目录文件的内容
2.21 readlink函数:读取符号链接文件本身的内容
2.22 realpath函数:将相对目录路径转换成绝对路径
2.23 remove函数:删除文件或者目录
2.24 rename函数:更改文件的名称或位置
2.25 rewinddir函数:回卷目录文件
2.26 seekdir函数:文件定位函数
2.27 stat函数:取得文件状态
2.28 symlink函数:创建一个符号链接
2.29 telldir函数:取得目录文件的读取位置
2.30 truncate函数:改变文件大小
2.31 umask:设置创建文件时使用的权限掩码
2.32 unlink函数:删除文件的一个硬链接
第3章 标准I/O函数
3.1 clearerr函数:清除错误标志
3.2 fclose函数:关闭流文件描述符
3.3 fdopen函数:转换文件描述符到文件指针
3.4 feof函数:文件结束判断函数
3.5 fflush函数:刷新流文件读写缓存
3.6 fgetc函数:从流文件中读取一个字符
3.7 fgetpos函数:返回流文件当前读写位置
3.8 fgets函数:从流文件中读出一行数据
3.9 fileno函数:获得流文件的文件描述符
3.10 fopen函数:打开文件
3.11 fputc函数:将字符写入流文件
3.12 fputs函数:将字符串写入流文件
3.13 fread函数:从流文件中读出数据
3.14 freopen函数:打开文件
3.15 fseek函数:移动流文件的读写位置
3.16 fsetpos函数:设置流文件当前读写位置
3.17 ftell函数:得到流文件的读取位置
3.18 fwrite函数:向流文件中写入数据
3.19 getc函数:从文件中读出一个字符
3.20 getchar函数:从标准输入中读入一个字符
3.21 gets函数:从标准输入中读入一行数据
3.22 mktemp函数:产生临时文件的文件名
3.23 putc函数:将字符写入文件
3.24 putchar函数:将字符输出到标准输出中
3.25 puts函数:将字符串输出在标准输出中
3.26 rewind函数:将流文件的读写位置移动到文件的起始位置
3.27 setbuf函数:设置文件缓冲区
3.28 setbuffer函数:设置文件缓冲区
3.29 setlinebuf函数:设置行缓冲模式
3.30 setvbuf函数:设置自定义文件缓冲区
3.31 tmpfile函数:建立临时的二进制文件
3.32 ungetc函数:将字符写回文件
第4章 格式化输入输出函数
4.1 fprintf函数:格式化输出到文件
4.2 fscanf函数:格式化从文件中读出数据
4.3 printf函数:格式化输出
4.4 scanf函数:格式化输入
4.5 snprintf函数:格式化字符输入
4.6 sprintf函数:格式化字符串打印
4.7 sscanf函数:格式化字符串取值
4.8 vfprintf函数:可变参数输出函数
4.9 vfscanf函数:格式化输入
4.10 vprintf函数:格式化输出函数
4.11 vscanf函数:格式化输入函数
4.12 vsnprintf函数:格式化字符串复制
4.13 vsprintf函数:格式化字符串复制
4.14 vsscanf函数:格式化字符输入
第5章 进程控制
5.1 abort函数:进程异常终止函数
5.2 atexit函数:进程终止处理函数
5.3 execl函数:执行文件函数
5.4 execle函数:执行文件的函数
5.5 execlp函数:从PATH环境变量中查找文件并执行
5.6 execv函数:执行文件
5.7 execve函数:执行文件
5.8 execvp函数:执行文件
5.9 exit函数:结束进程运行的函数
5.10 _exit函数:结束进程运行的函数
5.11 fork函数:建立一个新的进程
5.12 getgid函数:取得实际进程组ID
5.13 getegid函数:取得有效进程组ID
5.14 getpid函数:取得有效组ID
5.15 getppid函数:取得父进程的进程识别码
5.16 getpriority函数:取得进程执行优先级
5.17 longjmp函数:跳到原先setjmp存储的堆栈环境
5.18 on_exit函数:设置程序正常结束前调用的函数
5.19 setjmp函数:存储当前堆栈环境
5.20 setgid函数:设置进程的进程组ID
5.21 setuid函数:设置进程组ID
5.22 setpriority函数:设置程序进程优先级
5.23 siglongjmp函数:跳到原先sigset jmp存储的堆栈环境
5.24 sigsetjmp函数:存储当前堆栈环境和屏蔽的信号集
5.25 system函数:执行Shell命令
5.26 vfork函数:建立一个新的进程
5.27 wait函数:等待子进程中断或结束
5.28 waitpid函数:等待子进程中断或结束
5.29 wait3函数:等待进程结束并且输出子进程统计信息
第6章 进程间通信函数
6.1 ftok函数:获得项目相关的IPC键值
6.2 msgctl函数:消息队列操作函数
6.3 msgget函数:创建或打开消息队列
6.4 msgrcv函数:读取消息队列
6.5 msgsnd函数:向消息队列中写入消息
6.6 semctl函数:信号量操作函数
6.7 semget函数:创建或打开信号量
6.8 semop函数:释放或获取信号量
6.9 shmat函数:导入共享内存
6.10 shmctl函数:共享内存操作函数
6.11 shmdt函数:将共享内存从程序中脱离
6.12 shmget函数:创建共享内存
6.13 mkfifo函数:创建fifo管道函数
6.14 pclose函数:关闭管道文件
6.15 pipe函数:创建匿名管道
6.16 popen函数:创建管道文件
第7章 信号函数
7.1 alarm函数:内核定时器函数
7.2 kill函数:信号发送函数
7.3 pause函数:进程暂停执行函数
7.4 raise函数:向进程自身发送信号函数
7.5 sigaction函数:高级信号处理方式设置函数
7.6 sigaddset函数:添加信号到信号集函数
7.7 sigdelset函数:删除信号集中对应信号函数
7.8 sigemptyset函数:清空信号集函数
7.9 sigfillset函数:填充信号集函数
7.10 sigismember函数:测试某个信号是否在信号集中
7.11 signal函数:信号处理方式设置函数
7.12 sigpause函数:暂停进程直到信号到来
7.13 sigpending函数:查询未决信号
7.14 sigprocmask函数:信号屏蔽函数
7.15 sigsuspend函数:暂停直到信号到来
7.16 sleep函数:让进程休眠一段时间
第8章 用户、组函数及环境变量函数
8.1 clearenv函数:删除所有环境变量的值
8.2 cuserid函数:获得用户名函数
8.3 endgrent函数:关闭系统组文件函数
8.4 endpwent函数:关闭系统口令函数
8.5 entent函数:关闭utmp文件
8.6 fgetgrent函数:从文件中读取组数据
8.7 fgetpwent函数:从文件中读取密码格式数据
8.8 getegid函数:获得有效(effective gid)组识别符
8.9 getenv函数:取得环境变量的值
8.10 geteuid函数:获得有效(effective uid)用户识别符
8.11 getgid函数:获得组识别符
8.12 getgrent函数:从文件/etc/group中读取组信息
8.13 getgrgid函数:从文件/etc/group中查找组信息
8.14 getgrnam函数:从文件/etc/group中查找组信息
8.15 getgroups函数:返回当前用户所属的组列表
8.16 getlogin函数:获取当前用户的账号名称
8.17 getpw函数:获取指定uid的用户信息
8.18 getpwent函数:读取/etc/passwd文件中的数据
8.19 getpwnam函数:以用户名获取用户信息
8.20 getpwuid函数:以用户ID获取用户信息
8.21 getuid函数:获取当前进程所属的用户ID
8.22 getutent函数:获取登录信息
8.23 getutid函数:获取指定用户ID的登录信息
8.24 getutline函数:查找指定的登录信息
8.25 initgroups函数:初始化组信息
8.26 logwtmp函数:添加登录记录信息
8.27 putenv函数:改变环境变量的值
8.28 pututline函数:添加登录信息
8.29 setegid函数:设置有效组ID
8.30 setenv函数:改变环境变量的值
8.31 seteuid函数:设置有效用户ID
8.32 setfsgid函数:设置进程的文件系统的组ID
8.33 setfsuid函数:设置进程的文件系统的用户ID
8.34 setgid函数:设置进程的组ID
8.35 setgrent函数:将文件etc/group的读写位置移动到起始位置
8.36 setgroups函数:设置当前进程的组识别符
8.37 setpwent函数:将文件etc/passwd的读写位置移动到起始位置
8.38 setregid函数:设置当前进程的真实以及有效组ID
8.39 setreuid函数:设置当前进程的真实以及有效用户ID
8.40 setuid函数:设置进程的用户ID
8.41 setutent函数:将文件utmp的读写位置移动到起始位置
8.42 unsetenv函数:清除环境变量的值
8.43 updwtmp函数:将登录数据记录写入utmp文件
8.44 utmpname函数:设置文件utmp的绝对位置
第9章 错误处理与内存分配函数
9.1 brk函数:改变数据段大小
9.2 calloc函数:内存分配函数
9.3 ferror函数:文件错误判断
9.4 free函数:释放动态分配内存函数
9.5 getpagesize函数:获得操作系统内存页大小函数
9.6 malloc函数:动态内存分配函数
9.7 mmap函数:文件映射函数
9.8 munmap函数:释放映射的内存地址
9.9 perror函数:错误原因输出函数
9.10 realloc函数:内存截取函数
9.11 sbrk函数:增加数据空间
9.12 strerror函数:错误代码查询
第10章 日志函数、动态函数与正则表达式函数
10.1 closelog函数:关闭信息记录
10.2 dlclose函数:关闭动态库文件
10.3 dlerror函数:动态函数出错处理
10.4 dlopen函数:打开动态库文件
10.5 dlsym函数:在动态库文件中查找函数
10.6 openlog函数:打开记录信息
10.7 regcomp函数:编译正则表达式
10.8 regerror函数:编译错误判断函数
10.9 regexec函数:执行正则匹配
10.10 regfree函数:释放正则模式串资源
10.11 syslog函数:输出记录信息
第11章 时间函数
11.1 asctime函数:字符串时间操作函数
11.2 clock函数:计算运行时间函数
11.3 ctime函数:字符串时间函数
11.4 difftime函数:计算时间差函数
11.5 ftime函数:取得系统时间
11.6 gettimeofday函数:取得系统当前时间
11.7 gmtime函数:日历时间格式函数
11.8 localtime函数:获得当前系统时间
11.9 mktime函数:系统时间转换函数
11.10 settimeofday函数:系统时间设置函数
11.11 strftime函数:时间格式化输出函数
11.12 time函数:获得系统当前时间
11.13 tzset函数:设置系统时区变量tzname
第12章 socket相关函数
12.1 accept函数:处理socket请求函数
12.2 bind函数:将socket描述符与一个套接口绑定
12.3 connect函数:与远程主机连接
12.4 endprotoent函数:结束网络协议的读取函数
12.5 endservent函数:关闭文件/etc/services
12.6 gethostbyaddr函数:由IP获得主机信息
12.7 gethostbyname函数:由主机名获得主机信息
12.8 getprotobyname函数:由协议名获取协议数据
12.9 getprotobynumber函数:由协议编号获取协议数据
12.10 getprotoent函数:读取文件/etc/rotoent中的网络协议数据
12.11 getservbyname函数:获得网络服务协议数据
12.12 getservbyport函数:获得网络服务协议数据
12.13 getservent函数:读取主机网络服务数据
12.14 getsockopt函数:获得指定socket描述符的状态
12.15 herror函数:错误原因输出函数
12.16 hstrerror函数:错误代码查询
12.17 htonl函数:地址字节顺序转换
12.18 htons函数:地址字节顺序转换
12.19 inet_addr函数:网络地址类型转换
12.20 inet_aton函数:网络地址类型转换
12.21 inet_ntoa函数:网络地址类型转换
12.22 listen函数:网络socket监听
12.23 ntohl函数:地址字节顺序转换
12.24 ntohs函数:地址字节顺序转换
12.25 recv函数:接收消息
12.26 recvfrom函数:接收消息
12.27 recvmsg函数:多缓冲读取数据
12.28 send函数:向远程主机发送数据
12.29 sendto函数:发送数据到远程主机
12.30 setprotoent函数:打开网络协议文件
12.31 setservent函数:打开网络服务文件
12.32 setsockopt函数:设置socket描述符的状态
12.33 shutdown函数:结束socket套接字
12.34 socket函数:创建网络套接字
第13章 字符测试函数
13.1 isalnum函数:判断字符是否为英文字母或数字
13.2 isalpha函数:判断字符是否为英文字母
13.3 isascii函数:判断字符是否为ASCII字符
13.4 isblank函数:判断字符是否为空白字符
13.5 iscntrl函数:判断字符是否为ASCII的控制字符
13.6 isdigit函数:判断字符是否为阿拉伯数字
13.7 isgraph函数:判断字符是否为可打印字符
13.8 islower函数:判断字符是否为小写英文字母
13.9 isprint函数:判断字符是否为可打印字符
13.10 isspace函数:判断字符是否为空格字符
13.11 ispunct函数:判断字符是否为标点符号
13.12 isupper函数:判断字符是否为大写英文字母
13.13 isxdigit函数:判断字符是否为十六进制数字
第14章 数据转换函数
14.1 atof函数:将字符串转换成浮点数
14.2 atoi函数:将字符串转换成整数
14.3 atol函数:将字符串转换成长整数
14.4 ecvt函数:将浮点数转换成字符串
14.5 fcvt函数:将浮点数转换成字符串
14.6 gcvt函数:将浮点数转换成字符串
14.7 strtod函数:将字符串转换成浮点数
14.8 strtol函数:将字符串转换成长整数
14.9 strtoul函数:将字符串转换成无符号长整数
14.10 toascii函数:将整数转换成合法的ASCII字符
14.11 tolower函数:将大写字母转换成小写字母
14.12 toupper函数:将小写字母转换成大写字母
第15章 字符串处理函数
15.1 bcmp函数:比较两块内存中的内容
15.2 b函数:复制内存中的内容
15.3 bzero函数:将一块内存内容全清零
15.4 ffs函数:在一个整数中查找第一个值为真的位
15.5 index函数:查找字符串中第一个出现的指定字符
15.6 memccpy函数:复制内存中的内容
15.7 memchr函数:在一块内存指定范围查找一个指定字符
15.8 memcmp函数:比较内存中存放的内容
15.9 memcpy函数:复制一块内存内容到另一块中
15.10 memfrob函数:对某个内存区重新编码
15.11 memmove函数:复制内存内容
15.12 memset函数:将某值填入到一块内存区域
15.13 rindex函数:查找字符串中最后一个出现的指定字符
15.14 strcasecmp函数:忽略大小写比较字符串
15.15 strcat函数:将一个字符串连接另一字符串的尾部
15.16 strchr函数:查找字符串中指定字符
15.17 strcmp函数:比较两个字符串
15.18 strcoll的函数:根据当前环境信息来比较字符串
15.19 strcpy函数:复制一个字符串的内容到另一个字符串中
15.20 strcspn函数:计算字符串中由非指定字符集字符组成的子字符串的长度
15.21 strp函数:复制字符串内容
15.22 strfry函数:随机重组一个字符串
15.23 strlen函数:返回字符串长度
15.24 strncasecmp函数:忽略大小写比较两个字符串
15.25 strncat函数:将一个字符串的前n个字符连接到另一字符串的尾部
15.26 strncmp函数:比较两个字符串
15.27 strncpy函数:复制字符串
15.28 strpbrk函数:查找字符串中第一个出现的指定字符
15.29 strrchr函数:查找字符串中最后一个出现的指定字符
15.30 strspn函数:计算字符串中由指定字符集字符组成的子字符串的长度
第16章 数学计算函数
16.1 abs函数:计算整数的绝对值
16.2 acos函数:计算反余弦的值
16.3 asin函数:计算反正弦的值
16.4 atan函数:计算反正切的值
16.5 atan2函数:计算反正切的值
16.6 ceil函数:计算大于或等于给定参数的最小整数
16.7 cos函数:计算余弦的值
16.8 cosh函数:计算双曲线的余弦值
16.9 div函数:计算两整数相除后的商和余数
16.10 exp函数:计算浮点数的指数
16.11 fabs函数:计算浮点数的绝对值
16.12 frexp函数:计算浮点数的尾数和指数
16.13 hypot函数:计算直角三角形斜边长度
16.14 labs函数:计算长整数的绝对值
16.15 ldexp函数:计算浮点数与2的exp次方的积
16.16 ldiv函数:计算两长整数相除后的商和余数
16.17 log函数:计算以e为底的对数值
16.18 log10函数:计算以10为底的对数值
16.19 modf函数:将浮点数分解为小数和整数两部分
16.20 pow函数:计算次方值
16.21 sin函数:取正弦的值
16.22 sinh函数:计算双曲线的正弦值
16.23 sqrt函数:计算浮点数的平方根
16.24 tan函数:计算角度的正切值
16.25 tanh函数:计算双曲线的正切函数值
第17章 随机数及数据加密函数
17.1 crypt函数:对字符串使用DES算法编码
17.2 drand48函数:产生一个正的随机浮点数
17.3 erand48函数:产生一个正的随机浮点数
17.4 initstate:建立随机数状态数组
17.5 jrand48函数:产生一个长整型的随机数
17.6 lcong48函数:设置48位运算的随机数种子
17.7 lrand48函数:产生一个正的长整型随机数
17.8 mrand48函数:产生一个长整型随机数
17.9 nrand48函数:产生一个正的长整数随机数
17.10 rand函数:产生伪随机数
17.11 random函数:产生随机数
17.12 seed48函数:设置48位运算的随机数种子
17.13 setstate函数:建立随机数状态数组
17.14 srand函数:设置随机数种子
17.15 srand48函数:设置48位运算的随机数种子
17.16 srandom函数:设置随机数种子
17.17 getpass函数:取得用户输入密码字符串
第18章 数据结构函数
18.1 bsearch函数:在有序数组中二分查找数据
18.2 hcreate函数:建立哈希表
18.3 hdestroy函数:删除哈希表
18.4 hsearch函数:在哈希表中查找关键数据
18.5 lfind函数:线性搜索
18.6 lsearch函数:线性搜索
18.7 qsort函数:使用快速排序法排列数组
18.8 tdelete函数:从二叉树中删除数据
18.9 tfind函数:搜索二叉树
18.10 tsearch函数:搜索二叉树
18.11 twalk函数:遍历二叉树
第19章 其他函数
19.1 getopt函数:分析命令参数
19.2 isatty函数:判断文件描述符是否为终端
19.3 pselect函数:多路转接I/O
19.4 select函数:多路I/O转接
19.5 ttyname函数:返回终端机的名称
附录A Linux函数的首字母索引
附录B Linux指令的首字母索引

『柒』 Linux下signal信号汇总

Linux下signal信号汇总
SIGHUP 1 /* Hangup (POSIX). / 终止进程 终端线路挂断
SIGINT 2 /
Interrupt (ANSI). / 终止进程 中断进程 Ctrl+C
SIGQUIT 3 /
Quit (POSIX). / 建立CORE文件终止进程,并且生成core文件 Ctrl+
SIGILL 4 /
Illegal instruction (ANSI). / 建立CORE文件,非法指令
SIGTRAP 5 /
Trace trap (POSIX). / 建立CORE文件,跟踪自陷
SIGABRT 6 /
Abort (ANSI). /
SIGIOT 6 /
IOT trap (4.2 BSD). / 建立CORE文件,执行I/O自陷
SIGBUS 7 /
BUS error (4.2 BSD). / 建立CORE文件,总线错误
SIGFPE 8 /
Floating-point exception (ANSI). / 建立CORE文件,浮点异常
SIGKILL 9 /
Kill, unblockable (POSIX). / 终止进程 杀死进程
SIGUSR1 10 /
User-defined signal 1 (POSIX). / 终止进程 用户定义信号1
SIGSEGV 11 /
Segmentation violation (ANSI). / 建立CORE文件,段非法错误
SIGUSR2 12 /
User-defined signal 2 (POSIX). / 终止进程 用户定义信号2
SIGPIPE 13 /
Broken pipe (POSIX). / 终止进程 向一个没有读进程的管道写数据
SIGALARM 14 /
Alarm clock (POSIX). / 终止进程 计时器到时
SIGTERM 15 /
Termination (ANSI). / 终止进程 软件终止信号
SIGSTKFLT 16 /
Stack fault. /
SIGCLD SIGCHLD /
Same as SIGCHLD (System V). /
SIGCHLD 17 /
Child status has changed (POSIX). / 忽略信号 当子进程停止或退出时通知父进程
SIGCONT 18 /
Continue (POSIX). / 忽略信号 继续执行一个停止的进程
SIGSTOP 19 /
Stop, unblockable (POSIX). / 停止进程 非终端来的停止信号
SIGTSTP 20 /
Keyboard stop (POSIX). / 停止进程 终端来的停止信号 Ctrl+Z
SIGTTIN 21 /
Background read from tty (POSIX). / 停止进程 后台进程读终端
SIGTTOU 22 /
Background write to tty (POSIX). / 停止进程 后台进程写终端
SIGURG 23 /
Urgent condition on socket (4.2 BSD). / 忽略信号 I/O紧急信号
SIGXCPU 24 /
CPU limit exceeded (4.2 BSD). / 终止进程 CPU时限超时
SIGXFSZ 25 /
File size limit exceeded (4.2 BSD). / 终止进程 文件长度过长
SIGVTALRM 26 /
Virtual alarm clock (4.2 BSD). / 终止进程 虚拟计时器到时
SIGPROF 27 /
Profiling alarm clock (4.2 BSD). / 终止进程 统计分布图用计时器到时
SIGWINCH 28 /
Window size change (4.3 BSD, Sun). / 忽略信号 窗口大小发生变化
SIGPOLL SIGIO /
Pollable event occurred (System V). /
SIGIO 29 /
I/O now possible (4.2 BSD). / 忽略信号 描述符上可以进行I/O
SIGPWR 30 /
Power failure restart (System V). /
SIGSYS 31 /
Bad system call. */
SIGUNUSED 31

有两个信号可以停止进程:SIGTERM和SIGKILL。 SIGTERM 比较友好,进程能捕捉这个信号,根据您的需要来关闭程序。

在关闭程序之前,您可以结束打开的记录文件和完成正在做的任务。在某些情况下,假如进程正在进行作业而且不能中断,那么进程可以忽略这个SIGTERM信号。

对于 SIGKILL 信号,进程是不能忽略的。这是一个 “我不管您在做什么,立刻停止”的信号。假如您发送SIGKILL信号给进程,Linux就将进程停止在那里。

sigaddset 将信号signo 加入到信号集合之中;
sigdelset 将信号从信号集合中删除;
sigemptyset 函数初始化信号集合set,将set 设置为空;
sigfillset 也初始化信号集合,只是将信号集合设置为所有信号的集合;

阅读全文

与linuxcsignal相关的资料

热点内容
怎么托日本的朋友买苹果手机 浏览:145
筑业电力软件怎么倒出文件 浏览:572
全民飞机大战军衔怎么升级 浏览:431
公司自动化编程属于什么 浏览:925
位位用车app在哪里下载 浏览:427
格式工厂iphone铃声 浏览:171
linux设置字符编码 浏览:15
帝王世纪升级哪个兵种 浏览:409
c编程开发软件是什么 浏览:334
二的大写怎么写app 浏览:612
乐视数据删除了怎么找回来 浏览:651
ug编程初始化怎么办 浏览:295
nginxajax配置文件 浏览:467
小程序获取二进制图片 浏览:206
为什么有的数控车编程有百分号 浏览:425
m文件有什么用 浏览:359
宜昌做投标文件多少钱 浏览:166
uc浏览器小说下载那个文件夹 浏览:908
qq和手机 浏览:238
ps备份文件教程 浏览:306

友情链接