随笔分类 -  Linux系统编程

摘要:实际用户(组)ID: 标识用户是谁,这两个字段在登录时取自口令文件中的登录项。 有效用户(组)ID: 决定了对文件的访问权限,通常有效用户(组)ID等于实际用户(组)ID,谁运行有效ID就等于谁的实际ID,与文件的所有者无关。 如果设置了设置用户(组)ID位,那么有效用户(组)ID则等于文件的所有者 阅读全文
posted @ 2016-11-12 22:17 AlexAlex 阅读(845) 评论(0) 推荐(0)
摘要:printf输出条件: (1) 调用fflush; (2) 缓冲区满了; (3) 遇到\n \r这些字符 (4) 遇到scanf这些要取缓冲区的; (5) 线程或者进程退出; fork之后会拷贝父进程的缓冲区; 代码: 结果: (1) 第一次输入到控制台,write无缓冲直接输出,printf("b 阅读全文
posted @ 2016-04-01 18:57 AlexAlex 阅读(1040) 评论(0) 推荐(0)
摘要:1. 线程同步: 当多个控制线程共享相同的内存时,需要确保每个线程看到一致的数据视图。当某个线程可以修改变量,而其他线程也可以读取或者修改这个变量的时候,就需要对这些线程进行同步,以确保他们在访问变量的存储内容的时候不会访问到无效的数值; 当一个线程修改变量时,其他线程在读取这个变量的值的时候可能看 阅读全文
posted @ 2016-04-01 15:03 AlexAlex 阅读(354) 评论(0) 推荐(0)
摘要:output: 阅读全文
posted @ 2016-04-01 13:51 AlexAlex 阅读(738) 评论(0) 推荐(0)
摘要:1. 临界区和竞态条件: 临界区:访问和操作共享数据的代码段; 竞态条件:当有多个线程同时进入临界区时,执行结果取决于线程的执行顺序; 如下述代码,当多个线程同时调用func函数,对共享数据sum进行操作,实际上我们得到的结果则依赖于执行的相对时间; 线程1在a.取出sum值,然后b.对sum+1, 阅读全文
posted @ 2016-03-30 18:05 AlexAlex 阅读(718) 评论(0) 推荐(0)
摘要:1. 伪共享产生: 在SMP架构的系统中,每个CPU核心都有自己的cache,当多个线程在不同的核心上,并且某线程修改了在同一个cache line中的数据时,由于cache一致性原则,其他核心cache中相同cache line会失效,从而产生cache miss,并重新从内存中读入数据到cach 阅读全文
posted @ 2016-03-30 11:11 AlexAlex 阅读(548) 评论(0) 推荐(0)
摘要:1. 线程标识: (1) 比较两个线程ID; (2) 获取线程自身ID; 2. 线程的创建: 3. 线程的终止: (1) 线程只是从启动例程中返回,返回值是线程的退出码; (2) 线程可以被同一例程中的其他线程取消; (3) 线程调用pthread_exit。 rval_ptr是一个无类型指针,与传 阅读全文
posted @ 2016-03-28 22:34 AlexAlex 阅读(2477) 评论(0) 推荐(0)
摘要:1. signal函数: 比较容易理解的形式: 三个宏定义: SIG_ERR: 信号注册失败返回SIG_ERR SIG_DFL: 采用系统对此信号的默认动作; SIG_IGN: 忽略此信号,注意SIGKILL和SIGSTOP不能忽略; 这三个宏定义不是一定要使用上面的三个值,但是必须是不能声明函数的 阅读全文
posted @ 2016-03-28 13:40 AlexAlex 阅读(407) 评论(0) 推荐(0)
摘要:1. 守护进程: 守护进程也成精灵进程,是生成期较长的一种进程。他们常常在系统自举时启动,仅在系统关闭时才终止。因为他们没有控制终端,所以他们在后头运行。 2. ps查看守护进程的特征: 大多数守护进程以超级用户(用户ID=0)特权运行,守护进程均没有控制终端,其终端名设置为?,终端前台进程组ID设 阅读全文
posted @ 2016-03-23 23:43 AlexAlex 阅读(524) 评论(0) 推荐(0)
摘要:1. 函数原型: (1) statloc是一个整型指针;如果statloc不是一个空指针,则终止进程的终止状态就存放在它指向的单元内;如果不关心终止状态,则可将该参数指定为空指针; (2) waitpid中的pid参数作用如下: pid 1 等待任一子进程。这个waitpid与wait等效; wai 阅读全文
posted @ 2016-03-23 14:28 AlexAlex 阅读(966) 评论(0) 推荐(0)
摘要:1. 地址空间各段拷贝: fork: 内核为子进程生成新的地址空间结构,拷贝父进程的代码段,数据空间,堆,栈到自身的地址空间,但注意:子进程的代码段并不会分配物理空间,而是指向父进程的代码段物理空间,保持共享;子进程的数据空间,堆,栈都会对应分配物理空间; 写时复制(COW):内核为子进程生成新的地 阅读全文
posted @ 2016-03-23 11:26 AlexAlex 阅读(420) 评论(0) 推荐(0)
摘要:1. 基本概念: 孤儿进程:父进程退出,但是其子进程仍然在运行,那么这些子进程被称为孤儿进程;孤儿进程会被init进程收养,并作善后处理; 僵尸进程:一个已经终止,但是其父进程尚未对齐进行善后处理的进程被称为僵尸进程;ps命令状态为Z的进程; 善后处理:内核为每个终止子进程保存了一定量的信息,这些信 阅读全文
posted @ 2016-03-23 00:35 AlexAlex 阅读(382) 评论(0) 推荐(0)
摘要:exit(): --stdlib.h (1) 所有使用atexit()注册的函数,将会被以注册相反的顺序调用; (2) 所有打开的输出流被刷新,并且关闭流; (3) 使用tmpfile()创建的文件将会被删除; (4) 调用_exit(); _exit(): --unistd.h (1) 所有打开的 阅读全文
posted @ 2016-03-22 23:47 AlexAlex 阅读(166) 评论(0) 推荐(0)
摘要:不想说话,坑太深;持续学习网络编程中... 阅读全文
posted @ 2016-03-22 21:28 AlexAlex 阅读(190) 评论(0) 推荐(0)
摘要:1. 记录锁:记录锁的功能是,当一个进程正在读或者修改文件的某个部分的时候,它可以阻止其他进程修改同一文件区; 2. fcntl记录锁: 对于记录锁,cmd是F_GETLK, F_SETLK, F_SETLKW。 F_GETLK-判断由flockptr描述的锁是否会被另外一把锁排斥,若存在,则把现存 阅读全文
posted @ 2016-03-22 21:24 AlexAlex 阅读(1084) 评论(0) 推荐(0)
摘要:1. 管道:只能用于具有亲缘关系的进行通信,使用面相对较窄,实际开发中较少使用; 2. FIFO(命名管道):可以用于任意进程间的通信,对于大块数据的传输效率较高,可应用于单进程大量数据传递,和多个进程向一个进程传递数据; 3. 信号:无法传递数据,而且信号的种类有限,只适用于完成一些简单的事件通知 阅读全文
posted @ 2016-03-22 11:56 AlexAlex 阅读(1751) 评论(0) 推荐(0)
摘要:1. 域套接字: (1) 只能用于同一设备上不同进程之间的通信; (2) 效率高于网络套接字。域套接字仅仅是复制数据,并不走协议栈; (3) 可靠,全双工; 2. 域套接字地址结构: 当我们将一个地址绑定至域套接字,系统用该路径名创建一个类型为S_IFSOCK的文件,尽告诉客户端名字,不能打开,也不 阅读全文
posted @ 2016-03-21 23:29 AlexAlex 阅读(2895) 评论(0) 推荐(1)
摘要:1. 物理内存: 物理内存指的是插在计算机主板内存槽上的实际物理内存,CPU可以直接进行寻址; 物理内存的容量是固定的,但是寻址空间却取决于cpu地址线条数,如32位机,则寻址空间为2^32=4G, 即最大支持4G的寻址空间,即使我们插入了32G容量的内存条,我们也只能拥有4G的物理内存; 2. 虚 阅读全文
posted @ 2016-03-21 20:11 AlexAlex 阅读(3702) 评论(0) 推荐(0)
摘要:1. 共享内存: 共享内存方式可以在多个进程直接共享数据,因为其直接使用内存,不要多余的拷贝,是速度最快的IPC方式; 共享内存有两种实现方式,使用mmap和shm方式,如下图: (1) mmap方式是将文件与进程地址空间进行映射,对实际物理内存影响小; (2) shm方式是将每个进程的共享内存与实 阅读全文
posted @ 2016-03-21 18:24 AlexAlex 阅读(4630) 评论(0) 推荐(0)
摘要:1. FIFO: FIFO也被成为命名管道,因其通过路径关系绑定,可以用于任意进程间通信,而普通无名管道只能用于有共同祖先的进行直接通信; 命名管道也是半双工的,open管道的时候不要以读写方式打开,这种操作是未定义的; 2. FIFO创建: FIFO是一种文件类型,mode参数与open函数中的m 阅读全文
posted @ 2016-03-20 11:09 AlexAlex 阅读(3455) 评论(0) 推荐(0)