读书时间 05/29/2011

14 篇文章 0 订阅

 

《Linux环境下C编程V2》杨树青

 

1. gcc

-pipe有何用?

-Wall:提供N多警告信息

 

2. gdb

Q:core dump的分析,似乎比较有用

 

3. 进程组

leader进程:进程组号=进程号

setgpid(pid_t pid, pid_t pgid);  // 当两号相等时即创建新进程组

 

4. 共享内存

int shmget(key_t key, int size, int flag);

 

若key为IPC_PRIVATE,建一个大小为size的新共享内存,flag无效

若key不为IPC_PRIVATE,IPC_CREAT在flag中置位,IPC_EXCL不置位,则操作由key值决定

         若key为已经打开的一个shm键,则打开

         否则创建新shm

若key不为IPC_PRIVATE,IPC_CREAT在flag中置位,IPC_EXCL也置位,则执行创建动作

         若key值的shm已经存在,则失败

 

Q:IPC_EXCEL是神马东东?

 

5. 信号量

Q:信号量集,操作有点复杂呢?

Q:两个单独的进程如何取得同一个信号量的id的?约定吗?

 

6. 管道

半双工,同源进程,稍慢(比共享内存)

两个独立的fd

只存在于内核中

 

7. 命名管道FIFO

特殊文件存在于文件系统中

 

8. 消息队列

与pipe相比,最重要的区别是有消息类型概念

 

9. 文件流访问

缓冲区是区别于系统调用访问文件系统最大的区别

格式化I/O是另一大区别

 

10. 信号signal

针对进程process的异步事件通知机制,其实是软中断

不能传递大量信息,只通知事件发生

signal(sig_id, sig_handler)注册signal处理程序

SIGKILL与SIGSTOP无法被捕获及忽略

 

例:

 

[root@localhost ch10]# cat test10.1.sigterm.c
#include <stdio.h>
#include <signal.h>
#include <stdarg.h>

void terminatorHandler(int signumber);

int main() {
        char buffer1[100], buffer2[100];
        int i;
        if(signal(SIGTERM, terminatorHandler)==SIG_ERR) {
                perror("signal");
        }

        printf("PID: %d/n", getpid());

        for(;;) {
                fgets(buffer1, sizeof(buffer1), stdin);
                printf("input: %s/r/n", buffer1);
        }

        return 0;
}

void terminatorHandler(int signumber) {
        printf("SYSTERM signal caught. /n");
        exit(0);
}

 

* sigaction

有一些Linux下的高级signal处理特性,如信号集,阻塞,以后研究!

 

* 潜在风险

尤其于时间相关的操作时,如pause(), SIGALARM,在系统繁忙时可能会有预期外的结果出现!

 

11. 套接字通讯

Q:面向连接的设计要求对每个连接都有一个单独的socket,而无连接的设计则允许从一个socket上与多个主机通信?

T:socket读写的时候,通常可能会比要求的size少,需要机制重复read/write。

T:bind()是可选的,尤其是对client端,只有当需要使用特定端口(如服务器)时,必须使用bind()。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值