嵌入式学习笔记(第九天)系统网络续

来源:互联网 发布:程序员的发展 编辑:程序博客网 时间:2024/06/07 08:49
char *p = strchr(buf, '\n');  通过在buf中查找是否包含有'\n'

ps -A  查看进程

execl("/usr/bin/gedit"  , "gedit", "./execl.c", NULL);

参数一:执行文件的路径

参数二:要执行的文件名

参数三:文件执行时的参数

最后一个参数设置为NULL

进程的状态 :就绪状态,运行状态,阻塞状态

env 查询系统环境变量

进程间的通信:

无名管道只能用于具有亲缘关系的进程间的通信,创建无名管道的进程结束后,无名管道也被释放了

有名管道  p开头

共享内存

创建一块共享内存,程序结束后仍然存在

addr = shmat(shmid, NULL, 0);

参数二:NULL让系统自动将共享内存关联到进程合适位置

参数三:0表示读写
SHM_RDONLY:表示只读
没有只写
成功:返回值为共享内存的地址

失败:返回值为(void *)-1

取消关联

shmdt(addr)

将数据拷贝到共享内存中

strcpy((char *)addr, pMsg);

sprintf((char*)addr, "%s", pMsg);

memcpy(addr, pMsg, strlen(pMsg));

将数据从共享内存中拷贝出来

strcpy(caMsg, (char*)addr);

sscanf((char*)addr, "%s", caMsg);

memcpy(caMsg, addr, 64);

ipcs -m  查看共享内存段

addr = mmap(NULL, 1024, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);

NULL表示让系统自动映射到内存的合适位置

munmap(addr, 1024);

MAP_FAILED --> (void *)-1

文件映射

将文件的一部分内容映射到内存空间,对内存的操作,自动更新到文件中去

ipc 进程间通信

信号

./a.out & 后台运行 

kill -9 进程号   终止

kill -l 查看kill

发送信号:

kill(getpid(),SIGKILL);

闹钟信号:

alarm(5);  //SIGALRM:结束程序

重复会将之前的闹钟取消

SIGKILL和SIGSTOP不能使用自己的处理方式来处理

ctrl+c: SIGINT

设置信号的处理动作

signal(SIGINT, handle);

signal(SIGINT, SIG_IGN); SIG_IGN 忽略信号

信号的处理函数

void handle(int sig)

{
if (SIGINT == sig)
{
printf("catched sigint\n");
}

}

atoi 字符串转换为整型函数

线程:

pthread_create

创建线程,即创建一个并发执行的流程,该线程从属于进程,不和进程分离

进程和线程间共享所有资源

线程锁 --》互斥量

pthread_mutex_t proMutex;

pthread_mutex_lock(&proMutex);

pthread_mutex_unlock(&proMutex);

将fullsem的值加一

通知所有阻塞等待fullsem的线程

sem_post(&fullsem);

sem_wait(&emptysem);

检查指定信号量的值,若值大于0,则表示有资源可用,将其值减一,往下执行;若值等于0,则表示没有资源可用,则阻塞等待,直到有资源可用

联合体:是一种自定义的数据类型

union semun
{

int val;

struct semid_ds *buf;

unsigned short  *array;

struct seminfo  *__buf;

};  
其整体长度为联合体内最长的变量长度