下载 APP 38 信号 ( 下 ): 项目组 A 完成了, 如何及时通知项目组 B? 刘超 趣谈 Linux 操作系统 进入课程 讲述 : 刘超 时长 23:30 大小 18.84M 信号处理最常见的流程主要是两步, 第一步是注册信号处理函数, 第二步是发送信号和处理信号 上

Size: px
Start display at page:

Download "下载 APP 38 信号 ( 下 ): 项目组 A 完成了, 如何及时通知项目组 B? 刘超 趣谈 Linux 操作系统 进入课程 讲述 : 刘超 时长 23:30 大小 18.84M 信号处理最常见的流程主要是两步, 第一步是注册信号处理函数, 第二步是发送信号和处理信号 上"

Transcription

1 下载 APP 38 信号 ( 下 ): 项目组 A 完成了, 如何及时通知项目组 B? 刘超 趣谈 Linux 操作系统 进入课程 讲述 : 刘超 时长 23:30 大小 18.84M 信号处理最常见的流程主要是两步, 第一步是注册信号处理函数, 第二步是发送信号和处理信号 上一节, 我们讲了注册信号处理函数, 那一般什么情况下会产生信号呢? 我们这一节就来看一看

2 信号的发送 有时候, 我们在终端输入某些组合键的时候, 会给进程发送信号, 例如,Ctrl+C 产生 SIGINT 信号,Ctrl+Z 产生 SIGTSTP 信号 有的时候, 硬件异常也会产生信号 比如, 执行了除以 0 的指令,CPU 就会产生异常, 然后把 SIGFPE 信号发送给进程 再如, 进程访问了非法内存, 内存管理模块就会产生异常, 然后把信号 SIGSEGV 发送给进程 这里同样是硬件产生的, 对于中断和信号还是要加以区别 咱们前面讲过, 中断要注册中断处理函数, 但是中断处理函数是在内核驱动里面的, 信号也要注册信号处理函数, 信号处理函数是在用户态进程里面的 对于硬件触发的, 无论是中断, 还是信号, 肯定是先到内核的, 然后内核对于中断和信号处理方式不同 一个是完全在内核里面处理完毕, 一个是将信号放在对应的进程 task_struct 里信号相关的数据结构里面, 然后等待进程在用户态去处理 当然有些严重的信号, 内核会把进程干掉 但是, 这也能看出来, 中断和信号的严重程度不一样, 信号影响的往往是某一个进程, 处理慢了, 甚至错了, 也不过这个进程被干掉, 而中断影响的是整个系统 一旦中断处理中有了 bug, 可能整个 Linux 都挂了

3 有时候, 内核在某些情况下, 也会给进程发送信号 例如, 向读端已关闭的管道写数据时产生 SIGPIPE 信号, 当子进程 退出时, 我们要给父进程发送 SIG_CHLD 信号等 最直接的发送信号的方法就是, 通过命令 kill 来发送信号 了 例如, 我们都知道的 kill -9 pid 可以发送信号给一个进 程, 杀死它 另外, 我们还可以通过 kill 或者 sigqueue 系统调用, 发送信号给某个进程, 也可以通过 tkill 或者 tgkill 发送信号给某个线程 虽然方式多种多样, 但是最终都是调用了 do_send_sig_info 函数, 将信号放在相应的 task_struct 的信号数据结构中 kill->kill_something_info->kill_pid_info- >group_send_sig_info->do_send_sig_info tkill->do_tkill->do_send_specific->do_send_sig_info tgkill->do_tkill->do_send_specific- >do_send_sig_info rt_sigqueueinfo->do_rt_sigqueueinfo- >kill_proc_info->kill_pid_info->group_send_sig_info- >do_send_sig_info

4 do_send_sig_info 会调用 send_signal, 进而调用 send_signal 复制代码 SYSCALL_DEFINE2(kill, pid_t, pid, int, sig) { struct siginfo info; info.si_signo = sig; info.si_errno = 0; info.si_code = SI_USER; info.si_pid = task_tgid_vnr(current); info.si_uid = from_kuid_munged(current_user_ns( return kill_something_info(sig, &info, pid); static int send_signal(int sig, struct siginfo *info, int group, int from_ancestor_ns { struct sigpending *pending; struct sigqueue *q; int override_rlimit; int ret = 0, result; pending = group? &t->signal->shared_pending : if (legacy_queue(pending, sig)) goto ret; if (sig < SIGRTMIN) override_rlimit = (is_si_special(info)

5 30 else 31 override_rlimit = 0; q = sigqueue_alloc(sig, t, GFP_ATOMIC GFP 34 override_rlimit); 35 if (q) { 36 list_add_tail(&q->list, &pending->list) 37 switch ((unsigned long) info) { 38 case (unsigned long) SEND_SIG_NOINFO: 39 q->info.si_signo = sig; 40 q->info.si_errno = 0; 41 q->info.si_code = SI_USER; 42 q->info.si_pid = task_tgid_nr_n q->info.si_uid = from_kuid_mung 45 break; 46 case (unsigned long) SEND_SIG_PRIV: 47 q->info.si_signo = sig; 48 q->info.si_errno = 0; 49 q->info.si_code = SI_KERNEL; 50 q->info.si_pid = 0; 51 q->info.si_uid = 0; 52 break; 53 default: 54 copy_siginfo(&q->info, info); 55 if (from_ancestor_ns) 56 q->info.si_pid = 0; 57 break; userns_fixup_signal_uid(&q->info, t); out_set:

6 ret: signalfd_notify(t, sig); sigaddset(&pending->signal, sig); complete_signal(sig, t, group); return ret; 在这里, 我们看到, 在学习进程数据结构中 task_struct 里面的 sigpending 在上面的代码里面, 我们先是要决定应该用哪个 sigpending 这就要看我们发送的信号, 是给进程的还是线程的 如果是 kill 发送的, 也就是发送给整个进程的, 就应该发送给 t->signal->shared_pending 这里面是整个进程所有线程共享的信号 ; 如果是 tkill 发送的, 也就是发给某个线程的, 就应该发给 t->pending 这里面是这个线程的 task_struct 独享的 struct sigpending 里面有两个成员, 一个是一个集合 sigset_t, 表示都收到了哪些信号, 还有一个链表, 也表示 收到了哪些信号 它的结构如下 : 复制代码 struct sigpending { struct list_head list; sigset_t signal; ;

7 如果都表示收到了信号, 这两者有什么区别呢? 我们接着往下看 send_signal 里面的代码 接下来, 我们要调用 legacy_queue 如果满足条件, 那就直接退出 那 legacy_queue 里面判断的是什么条件呢? 我们来看它的代码 复制代码 static inline int legacy_queue(struct sigpending *signa { return (sig < SIGRTMIN) && sigismember(&signals #define SIGRTMIN 32 #define SIGRTMAX _NSIG #define _NSIG 64 当信号小于 SIGRTMIN, 也即 32 的时候, 如果我们发现这个信号已经在集合里面了, 就直接退出了 这样会造成什么现象呢? 就是信号的丢失 例如, 我们发送给进程 100 个 SIGUSR1( 对应的信号为 10), 那最终能够被我们的信号处理函数处理的信号有多少呢? 这就不好说了, 比如总共 5 个 SIGUSR1, 分别是 A B C D E

8 如果这五个信号来得太密 A 来了, 但是信号处理函数还没来得及处理,B C D E 就都来了 根据上面的逻辑, 因为 A 已经将 SIGUSR1 放在 sigset_t 集合中了, 因而后面四个都要丢失 如果是另一种情况,A 来了已经被信号处理函数处理了, 内核在调用信号处理函数之前, 我们会将集合中的标志位清除, 这个时候 B 再来,B 还是会进入集合, 还是会被处理, 也就不会丢 这样信号能够处理多少, 和信号处理函数什么时候被调用, 信号多大频率被发送, 都有关系, 而且从后面的分析, 我们可以知道, 信号处理函数的调用时间也是不确定的 看小于 32 的信号如此不靠谱, 我们就称它为不可靠信号 如果大于 32 的信号是什么情况呢? 我们接着看 接下来, sigqueue_alloc 会分配一个 struct sigqueue 对象, 然后通过 list_add_tail 挂在 struct sigpending 里面的链表上 这样就靠谱多了是不是? 如果发送过来 100 个信号, 变成链表上的 100 项, 都不会丢, 哪怕相同的信号发送多遍, 也处理多遍 因此, 大于 32 的信号我们称为可靠信号 当然, 队列的长度也是有限制的, 如果我们执行 ulimit 命令, 可以看到, 这个限制 pending signals (-i) 当信号挂到了 task_struct 结构之后, 最后我们需要调用 complete_signal 这里面的逻辑也很简单, 就是说, 既然

9 这个进程有了一个新的信号, 赶紧找一个线程处理一下吧 复制代码 static void complete_signal(int sig, struct task_struct { struct signal_struct *signal = p->signal; struct task_struct *t; /* * Now find a thread we can wake up to take the * * If the main thread wants the signal, it gets * Probably the least surprising to the average */ if (wants_signal(sig, p)) t = p; else if (!group thread_group_empty(p)) /* * There is just one thread and it does * It will dequeue unblocked signals be */ return; else { /* * Otherwise try to find a suitable thr */ t = signal->curr_target; while (!wants_signal(sig, t)) { t = next_thread(t); if (t == signal->curr_target) return; signal->curr_target = t;

10 /* * The signal is already in the shared-pending * Tell the chosen thread to wake up and dequeu */ signal_wake_up(t, sig == SIGKILL); return; 在找到了一个进程或者线程的 task_struct 之后, 我们要调 用 signal_wake_up, 来企图唤醒它,signal_wake_up 会 调用 signal_wake_up_state 复制代码 void signal_wake_up_state(struct task_struct *t, unsign { set_tsk_thread_flag(t, TIF_SIGPENDING); if (!wake_up_state(t, state TASK_INTERRUPTIBL kick_process(t); signal_wake_up_state 里面主要做了两件事情 第一, 就 是给这个线程设置 TIF_SIGPENDING, 这就说明其实信号

11 的处理和进程的调度是采取这样一种类似的机制 还记得咱 们调度的时候是怎么操作的吗? 当发现一个进程应该被调度的时候, 我们并不直接把它赶下来, 而是设置一个标识位 TIF_NEED_RESCHED, 表示等待调度, 然后等待系统调用结束或者中断处理结束, 从内核态返回用户态的时候, 调用 schedule 函数进行调度 信号也是类似的, 当信号来的时候, 我们并不直接处理这个信号, 而是设置一个标识位 TIF_SIGPENDING, 来表示已经有信号等待处理 同样等待系统调用结束, 或者中断处理结束, 从内核态返回用户态的时候, 再进行信号的处理 signal_wake_up_state 的第二件事情, 就是试图唤醒这个进程或者线程 wake_up_state 会调用 try_to_wake_up 方法 这个函数我们讲进程的时候讲过, 就是将这个进程或者线程设置为 TASK_RUNNING, 然后放在运行队列中, 这个时候, 当随着时钟不断的滴答, 迟早会被调用 如果 wake_up_state 返回 0, 说明进程或者线程已经是 TASK_RUNNING 状态了, 如果它在另外一个 CPU 上运行, 则调用 kick_process 发送一个处理器间中断, 强制那个进程或者线程重新调度, 重新调度完毕后, 会返回用户态运行 这是一个时机会检查 TIF_SIGPENDING 标识位 信号的处理

12 好了, 信号已经发送到位了, 什么时候真正处理它呢? 就是在从系统调用或者中断返回的时候, 咱们讲调度的时候讲过, 无论是从系统调用返回还是从中断返回, 都会调用 exit_to_usermode_loop, 只不过我们上次主要关注了 _TIF_NEED_RESCHED 这个标识位, 这次我们重点关注 _TIF_SIGPENDING 标识位 复制代码 static void exit_to_usermode_loop(struct pt_regs *regs, { while (true) { if (cached_flags & _TIF_NEED_RESCHED) schedule(); /* deal with pending signal delivery */ if (cached_flags & _TIF_SIGPENDING) do_signal(regs); if (!(cached_flags & EXIT_TO_USERMODE_L break; 如果在前一个环节中, 已经设置了 _TIF_SIGPENDING, 我 们就调用 do_signal 进行处理

13 复制代码 void do_signal(struct pt_regs *regs) { struct ksignal ksig; if (get_signal(&ksig)) { /* Whee! Actually deliver the signal. handle_signal(&ksig, regs); return; /* Did we come from a system call? */ if (syscall_get_nr(current, regs) >= 0) { /* Restart the system call - no handler switch (syscall_get_error(current, regs case -ERESTARTNOHAND: case -ERESTARTSYS: case -ERESTARTNOINTR: regs->ax = regs->orig_ax; regs->ip -= 2; break; case -ERESTART_RESTARTBLOCK: regs->ax = get_nr_restart_sysca regs->ip -= 2; break; restore_saved_sigmask();

14 do_signal 会调用 handle_signal 按说, 信号处理就是调 用用户提供的信号处理函数, 但是这事儿没有看起来这么简 单, 因为信号处理函数是在用户态的 咱们又要来回忆系统调用的过程了 这个进程当时在用户态执行到某一行 Line A, 调用了一个系统调用, 在进入内核的那一刻, 在内核 pt_regs 里面保存了用户态执行到了 Line A 现在我们从系统调用返回用户态了, 按说应该从 pt_regs 拿出 Line A, 然后接着 Line A 执行下去, 但是为了响应信号, 我们不能回到用户态的时候返回 Line A 了, 而是应该返回信号处理函数的起始地址 复制代码 static void handle_signal(struct ksignal *ksig, struct pt_regs *reg { bool stepping, failed; /* Are we from a system call? */ if (syscall_get_nr(current, regs) >= 0) { /* If so, check system call restarting. switch (syscall_get_error(current, regs case -ERESTART_RESTARTBLOCK: case -ERESTARTNOHAND: regs->ax = -EINTR; break; case -ERESTARTSYS: if (!(ksig->ka.sa.sa_flags & SA regs->ax = -EINTR;

15 break; /* fallthrough */ case -ERESTARTNOINTR: regs->ax = regs->orig_ax; regs->ip -= 2; break; failed = (setup_rt_frame(ksig, regs) < 0); signal_setup_done(failed, ksig, stepping); 这个时候, 我们就需要干预和自己来定制 pt_regs 了 这个时候, 我们要看, 是否从系统调用中返回 如果是从系统调用返回的话, 还要区分我们是从系统调用中正常返回, 还是在一个非运行状态的系统调用中, 因为会被信号中断而返回 我们这里解析一个最复杂的场景 还记得咱们解析进程调度的时候, 我们举的一个例子, 就是从一个 tap 网卡中读取数据 当时我们主要关注 schedule 那一行, 也即如果当发现没有数据的时候, 就调用 schedule, 自己进入等待状态, 然后将 CPU 让给其他进程 具体的代码如下 :

16 复制代码 static ssize_t tap_do_read(struct tap_queue *q, struct iov_iter *to, int noblock, struct sk_buff { while (1) { if (!noblock) prepare_to_wait(sk_sleep(&q->sk TASK_INTERRUPTI /* Read frames from the queue */ skb = skb_array_consume(&q->skb_array); if (skb) break; if (noblock) { ret = -EAGAIN; break; if (signal_pending(current)) { ret = -ERESTARTSYS; break; /* Nothing to read, let's sleep */ schedule(); 这里我们关注和信号相关的部分 这其实是一个信号中断系 统调用的典型逻辑

17 首先, 我们把当前进程或者线程的状态设置为 TASK_INTERRUPTIBLE, 这样才能是使这个系统调用可以 被中断 其次, 可以被中断的系统调用往往是比较慢的调用, 并且会因为数据不就绪而通过 schedule 让出 CPU 进入等待状态 在发送信号的时候, 我们除了设置这个进程和线程的 _TIF_SIGPENDING 标识位之外, 还试图唤醒这个进程或者线程, 也就是将它从等待状态中设置为 TASK_RUNNING 当这个进程或者线程再次运行的时候, 我们根据进程调度第一定律, 从 schedule 函数中返回, 然后再次进入 while 循环 由于这个进程或者线程是由信号唤醒的, 而不是因为数据来了而唤醒的, 因而是读不到数据的, 但是在 signal_pending 函数中, 我们检测到了 _TIF_SIGPENDING 标识位, 这说明系统调用没有真的做完, 于是返回一个错误 ERESTARTSYS, 然后带着这个错误从系统调用返回 然后, 我们到了 exit_to_usermode_loop->do_signal- >handle_signal 在这里面, 当发现出现错误 ERESTARTSYS 的时候, 我们就知道这是从一个没有调用完的系统调用返回的, 设置系统调用错误码 EINTR

18 接下来, 我们就开始折腾 pt_regs 了, 主要通过调用 setup_rt_frame-> setup_rt_frame 复制代码 static int setup_rt_frame(int sig, struct ksignal *ks sigset_t *set, struct pt_re { struct rt_sigframe user *frame; void user *fp = NULL; int err = 0; frame = get_sigframe(&ksig->ka, regs, sizeof(st put_user_try { /* Set up to return from userspace. If already in userspace. */ /* x86-64 should always use SA_RESTORER if (ksig->ka.sa.sa_flags & SA_RESTORER) put_user_ex(ksig->ka.sa.sa_rest put_user_catch(err); err = setup_sigcontext(&frame->uc.uc_mcontext, err = copy_to_user(&frame->uc.uc_sigmask, se /* Set up registers for signal handler */ regs->di = sig; /* In case the signal handler was declared with regs->ax = 0; regs->si = (unsigned long)&frame->info; regs->dx = (unsigned long)&frame->uc;

19 regs->ip = (unsigned long) ksig->ka.sa.sa_handl regs->sp = (unsigned long)frame; regs->cs = USER_CS; return 0; frame 的类型是 rt_sigframe frame 的意思是帧 我们只 有在学习栈的时候, 提到过栈帧的概念 对的, 这个 frame 就是一个栈帧 我们在 get_sigframe 中会得到 pt_regs 的 sp 变量, 也就是原来这个程序在用户态的栈顶指针, 然后 get_sigframe 中, 我们会将 sp 减去 sizeof(struct rt_sigframe), 也就是把这个栈帧塞到了栈里面, 然后我们又在 setup_rt_frame 中把 regs->sp 设置成等于 frame 这就相当于强行在程序原来的用户态的栈里面插入了一个栈帧, 并在最后将 regs- >ip 设置为用户定义的信号处理函数 sa_handler 这意味着, 本来返回用户态应该接着原来的代码执行的, 现在不了, 要执行 sa_handler 了 那执行完了以后呢? 按照函数栈的规则, 弹出上一个栈帧来, 也就是弹出了 frame 那如果我们假设 sa_handler 成功返回了, 怎么回到程序原 来在用户态运行的地方呢? 玄机就在 frame 里面 要想恢

20 复原来运行的地方, 首先, 原来的 pt_regs 不能丢, 这个没 问题, 是在 setup_sigcontext 里面, 将原来的 pt_regs 保 存在了 frame 中的 uc_mcontext 里面 另外, 很重要的一点, 程序如何跳过去呢? 在 setup_rt_frame 中, 还有一个不引起重视的操作, 那就是通过 put_user_ex, 将 sa_restorer 放到了 frame- >pretcode 里面, 而且还是按照函数栈的规则 函数栈里面包含了函数执行完跳回去的地址 当 sa_handler 执行完之后, 弹出的函数栈是 frame, 也就应该跳到 sa_restorer 的地址 这是什么地址呢? 咱们在 sigaction 介绍的时候就没有介绍它, 在 Glibc 的 libc_sigaction 函数中也没有注意到, 它被赋值成了 restore_rt 这其实就是 sa_handler 执行完毕之后, 马上要执行的函数 从名字我们就能感觉到, 它将恢复原来程序运行的地方 在 Glibc 中, 我们可以找到它的定义, 它竟然调用了一个系 统调用, 系统调用号为 NR_rt_sigreturn 复制代码 RESTORE (restore_rt, NR_rt_sigreturn) #define RESTORE(name, syscall) RESTORE2 (name, syscall)

21 # define RESTORE2(name, syscall) \ asm \ ( \ ".LSTART_" #name ":\n" \ ".type " #name \ " " #name ":\n" \ " movq $" #syscall ", %rax\n" \ " syscall\n" \ 我们可以在内核里面找到 NR_rt_sigreturn 对应的系统调 用 复制代码 asmlinkage long sys_rt_sigreturn(void) { struct pt_regs *regs = current_pt_regs(); struct rt_sigframe user *frame; sigset_t set; unsigned long uc_flags; frame = (struct rt_sigframe user *)(regs->sp if ( copy_from_user(&set, &frame->uc.uc_sigmas goto badframe; if ( get_user(uc_flags, &frame->uc.uc_flags)) goto badframe; set_current_blocked(&set); if (restore_sigcontext(regs, &frame->uc.uc_mcon

22 goto badframe; return regs->ax; 在这里面, 我们把上次填充的那个 rt_sigframe 拿出来, 然后 restore_sigcontext 将 pt_regs 恢复成为原来用户态的样子 从这个系统调用返回的时候, 应用还误以为从上次的系统调用返回的呢 至此, 整个信号处理过程才全部结束 总结时刻 信号的发送与处理是一个复杂的过程, 这里来总结一下 1. 假设我们有一个进程 A,main 函数里面调用系统调用进入内核 2. 按照系统调用的原理, 会将用户态栈的信息保存在 pt_regs 里面, 也即记住原来用户态是运行到了 line A 的地方 3. 在内核中执行系统调用读取数据

23 4. 当发现没有什么数据可读取的时候, 只好进入睡眠状态, 并且调用 schedule 让出 CPU, 这是进程调度第一定律 5. 将进程状态设置为 TASK_INTERRUPTIBLE, 可中断的睡眠状态, 也即如果有信号来的话, 是可以唤醒它的 6. 其他的进程或者 shell 发送一个信号, 有四个函数可以调用 kill,tkill,tgkill,rt_sigqueueinfo 7. 四个发送信号的函数, 在内核中最终都是调用 do_send_sig_info 8. do_send_sig_info 调用 send_signal 给进程 A 发送一个信号, 其实就是找到进程 A 的 task_struct, 或者加入信号集合, 为不可靠信号, 或者加入信号链表, 为可靠信号 9. do_send_sig_info 调用 signal_wake_up 唤醒进程 A 10. 进程 A 重新进入运行状态 TASK_RUNNING, 根据进程调度第一定律, 一定会接着 schedule 运行 11. 进程 A 被唤醒后, 检查是否有信号到来, 如果没有, 重新循环到一开始, 尝试再次读取数据, 如果还是没有数据, 再次进入 TASK_INTERRUPTIBLE, 即可中断的睡眠状态 12. 当发现有信号到来的时候, 就返回当前正在执行的系统调用, 并返回一个错误表示系统调用被中断了 13. 系统调用返回的时候, 会调用 exit_to_usermode_loop, 这是一个处理信号的时机 14. 调用 do_signal 开始处理信号

24 15. 根据信号, 得到信号处理函数 sa_handler, 然后修改 pt_regs 中的用户态栈的信息, 让 pt_regs 指向 sa_handler 同时修改用户态的栈, 插入一个栈帧 sa_restorer, 里面保存了原来的指向 line A 的 pt_regs, 并且设置让 sa_handler 运行完毕后, 跳到 sa_restorer 运行 16. 返回用户态, 由于 pt_regs 已经设置为 sa_handler, 则返回用户态执行 sa_handler 17. sa_handler 执行完毕后, 信号处理函数就执行完了, 接着根据第 15 步对于用户态栈帧的修改, 会跳到 sa_restorer 运行 18. sa_restorer 会调用系统调用 rt_sigreturn 再次进入内核 19. 在内核中,rt_sigreturn 恢复原来的 pt_regs, 重新指向 line A 20. 从 rt_sigreturn 返回用户态, 还是调用 exit_to_usermode_loop 21. 这次因为 pt_regs 已经指向 line A 了, 于是就到了进程 A 中, 接着系统调用之后运行, 当然这个系统调用返回的是它被中断了, 没有执行完的错误

25 课堂练习 在 Linux 内核里面 很多地方都存在信号和信号处理 所以 signal_pending 这个函数也随处可见 这样我们就能判断 是否有信号发生 请你在内核代码中找到 signal_pending 出现的一些地方 看有什么规律 我们后面的章节会经常遇 到它 欢迎留言和我分享你的疑惑和见解 也欢迎可以收藏本节内 容 反复研读 你也可以把今天的内容分享给你的朋友 和 他一起学习和进步

26 版权归极客邦科技所有, 未经许可不得传播售卖 页面已增加防盗追踪, 如有侵权极客邦将依法追究其法律责任 上一篇 37 信号 ( 上 ): 项目组 A 完成了, 如何及时通知项目 精选留言 (5) 写留言 安排 能把这个流程串起来, 老师功力深厚啊 2

27 许童童 讲得太好了, 真是深入浅出啊! Sharry Linux 信号通信主要由如下几个步骤组成 - 信号处理函数的注册 - 信号处理函数的注册, 定义在用户空间 - 注册最终通过 rt_sigaction 系统调用发起 - 将用户空间定义的信号处理函数保存到 task_struct 刘強 老师, 既然内核态对用户态的栈随意操作 ( 果然是内核, 权利就是大 ), 但返回的时候还是保持系统调用前的样子, 丝毫没有察觉背后发生了这么多事情, 就好像调用了一个普通用户态的函数一样, 那么我在用户态调试程序的时候, 能否看到这种内核对用户栈的修改? 小龙的城堡

28 这一章讲得非常棒! 很清晰! 感谢老师!

ebook15-10

ebook15-10 1 0 10.1 U N I X V 7 4. 3 B S D S V R 3 P O S I X. 1 100 % 10.2 S I G S I G A B RT a b o r t S I G A L R M a l a r m V 7 1 5 S V R 4 4. 3 + B S D 31 < s i g n a l. h > 0 10. 9 k i l l 0 P O S I X. 1 D

More information

第6章 信号量,中断和时间

第6章  信号量,中断和时间 6 6 Signal IPC POSIX Unix IPC Ctrl+C 9 IPC Linux Interrupt 5 Linux Linux CPU Linux Linux include/asm-i386/spinlock.h 12582 #ifdef UP SMP UP SMP 10 SMP Linux Nonrealtime SIGSEGVSIGHUP - - 52 6 SIGKILL realtime

More information

Kernel Kernel Kernel Kernel load estimator runqueue kernel/sched.

Kernel Kernel Kernel Kernel load estimator runqueue kernel/sched. Linux Kernel 2.6 20321131 Kernel 2.4...3 Kernel 2.4...3 Kernel 2.4...3 Kernel 2.6...3...3 1....3 2....4 3. load estimator...4 4....4 5....4...4 1....4 2. runqueue kernel/sched.c...4 3. task_struct(include/linux/sched.h)...6...9

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc Java C++ Pascal C# C# if if if for while do while foreach while do while C# 3.1.1 ; 3-1 ischeck Test() While ischeck while static bool ischeck = true; public static void Test() while (ischeck) ; ischeck

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 The BitCoin Scripting Language 交易实例 交易结构 "result": { "txid": "921a dd24", "hash": "921a dd24", "version": 1, "size": 226, "locktime": 0, "vin": [ ], "vout": [ ], "blockhash": "0000000000000000002c510d

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

新版 明解C言語入門編

新版 明解C言語入門編 328, 4, 110, 189, 103, 11... 318. 274 6 ; 10 ; 5? 48 & & 228! 61!= 42 ^= 66 _ 82 /= 66 /* 3 / 19 ~ 164 OR 53 OR 164 = 66 ( ) 115 ( ) 31 ^ OR 164 [] 89, 241 [] 324 + + 4, 19, 241 + + 22 ++ 67 ++ 73 += 66

More information

Guava学习之CharSequenceReader

Guava学习之CharSequenceReader CharSequenceReader 类是以 CharSequence 的形式读取字符 CharSequenceReader 类继承自 Reader 类, 除了 remaining() hasremaining() 以及 checkopen() 函数之后, 其他的函数都是重写 Reader 类中的函数 CharSequenceReader 类声明没有用 public 关键字, 所以我们暂时还不能调用这个类

More information

新版 明解C++入門編

新版 明解C++入門編 511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,

More information

新・解きながら学ぶJava

新・解きながら学ぶJava 481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --

More information

46 * the current mask in old_mask and block until a signal comes in. 47 */ /* 自动地更换成新的信号屏蔽码, 并等待信号的到来 * * 我们需要对系统调用 (syscall) 做一些处理 我们会从系统调用库接口取得某些信息

46 * the current mask in old_mask and block until a signal comes in. 47 */ /* 自动地更换成新的信号屏蔽码, 并等待信号的到来 * * 我们需要对系统调用 (syscall) 做一些处理 我们会从系统调用库接口取得某些信息 程序 8-6 linux/kernel/signal.c 1 /* 2 * linux/kernel/signal.c 3 * 4 * (C) 1991 Linus Torvalds 5 */ 6 7 #include // 调度程序头文件, 定义任务结构 task_struct 初始任务 0 的数据, // 还有一些有关描述符参数设置和获取的嵌入式汇编函数宏语句 8

More information

新・解きながら学ぶC言語

新・解きながら学ぶC言語 330!... 67!=... 42 "... 215 " "... 6, 77, 222 #define... 114, 194 #include... 145 %... 21 %... 21 %%... 21 %f... 26 %ld... 162 %lf... 26 %lu... 162 %o... 180 %p... 248 %s... 223, 224 %u... 162 %x... 180

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

新・明解C言語入門編『索引』

新・明解C言語入門編『索引』 !... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177

More information

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco Windows RTEMS 1 Danilliu MMI TCP/IP 80486 QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos ecos Email www.rtems.com RTEMS ecos RTEMS RTEMS Windows

More information

A Preliminary Implementation of Linux Kernel Virus and Process Hiding

A Preliminary Implementation of Linux Kernel Virus and Process Hiding 邵 俊 儒 翁 健 吉 妍 年 月 日 学 号 学 号 学 号 摘 要 结 合 课 堂 知 识 我 们 设 计 了 一 个 内 核 病 毒 该 病 毒 同 时 具 有 木 马 的 自 动 性 的 隐 蔽 性 和 蠕 虫 的 感 染 能 力 该 病 毒 获 得 权 限 后 会 自 动 将 自 身 加 入 内 核 模 块 中 劫 持 的 系 统 调 用 并 通 过 简 单 的 方 法 实 现 自 身 的

More information

untitled

untitled 1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override

More information

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; Memory & Pointer trio@seu.edu.cn 2.1 2.1.1 1 int *p int a 0x00C7 0x00C7 0x00C7 2.1.2 2 int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; 2.1.3 1. 2. 3. 3 int A,

More information

FY.DOC

FY.DOC 高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主

More information

C/C++ - 字符输入输出和字符确认

C/C++ - 字符输入输出和字符确认 C/C++ Table of contents 1. 2. getchar() putchar() 3. (Buffer) 4. 5. 6. 7. 8. 1 2 3 1 // pseudo code 2 read a character 3 while there is more input 4 increment character count 5 if a line has been read,

More information

Microsoft Word - 01.DOC

Microsoft Word - 01.DOC 第 1 章 JavaScript 简 介 JavaScript 是 NetScape 公 司 为 Navigator 浏 览 器 开 发 的, 是 写 在 HTML 文 件 中 的 一 种 脚 本 语 言, 能 实 现 网 页 内 容 的 交 互 显 示 当 用 户 在 客 户 端 显 示 该 网 页 时, 浏 览 器 就 会 执 行 JavaScript 程 序, 用 户 通 过 交 互 式 的

More information

Microsoft PowerPoint - os_4.ppt

Microsoft PowerPoint - os_4.ppt 行 程 資 科 系 林 偉 川 行 程 概 念 行 程 與 程 式 主 要 的 不 同 點 : 程 式 是 被 放 在 外 部 的 儲 存 裝 置 如 磁 碟 上, 而 行 程 則 被 放 在 記 憶 體 中 程 式 在 儲 存 裝 置 中 是 靜 態 的, 而 行 程 在 記 憶 體 中 是 動 態 的, 它 會 隨 著 一 些 事 件 的 發 生 而 產 生 相 對 的 改 變 行 程, 就 是

More information

ECF_Signals_and_Nonlocal_Jumps_罗世通

ECF_Signals_and_Nonlocal_Jumps_罗世通 异常控制流 : 信号与 非本地跳转 ECF: Signals & Nonlocal Jumps 罗世通元培学院 2018 年年 12 月 6 日 1 为什什么需要信号? Simple Shell shellex.c Foreground job child process execve shell command fork waitpid Background job child process execve

More information

IntelBook_cn.doc

IntelBook_cn.doc 3.3.3 信号 (Signal) 处理 信号 (signal) 是向进程发送的软件通知, 通知进程有事件发生 引发信号的事件发生时, 信号就被生成 (generate) 了 进程根据信号采取行动时, 信号就被传递 (deliver) 了 信号的寿命 (lifetime) 就是信号的生成和传递之间的时间间隔 已经生成但还未被传递的信号被称为挂起 (pending) 的信号 在信号生成和信号传递之间可能会有相当长的时间

More information

ebook

ebook 3 3 3.1 3.1.1 ( ) 90 3 1966 B e r n s t e i n P ( i ) R ( i ) W ( i P ( i P ( j ) 1) R( i) W( j)=φ 2) W( i) R( j)=φ 3) W( i) W( j)=φ 3.1.2 ( p r o c e s s ) 91 Wi n d o w s Process Control Bl o c k P C

More information

C 1

C 1 C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=

More information

Microsoft PowerPoint - plan06.ppt

Microsoft PowerPoint - plan06.ppt 程 序 设 计 语 言 原 理 Principle of Programming Languages 裘 宗 燕 北 京 大 学 数 学 学 院 2012.2~2012.6 6. 基 本 控 制 抽 象 子 程 序 抽 象 子 程 序 活 动 和 局 部 环 境 静 态 实 现 模 型 一 般 实 现 模 型 调 用 序 列 和 在 线 展 开 参 数 机 制 泛 型 子 程 序 异 常 处 理 其

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha CYPOK CYPOK 1 UltraEdit Project-->Install Language Tool: Language Suite----->hi-tech picc Tool Name ---->PICC Compiler Executable ---->c:hi-picinpicc.exe ( Command-line Project-->New Project-->File Name--->myc

More information

PIC_SERVER (11) SMTP ( ) ( ) PIC_SERVER (10) SMTP PIC_SERVER (event driven) PIC_SERVER SMTP 1. E-

PIC_SERVER (11) SMTP  ( ) ( ) PIC_SERVER (10) SMTP  PIC_SERVER (event driven)  PIC_SERVER SMTP  1.  E- (2005-02-01) (2005-04-28) PIC_SERVER (10) SMTP E-mail PIC_SERVER (event driven) E-mail PIC_SERVER SMTP E-mail 1. E-mail E-mail 1 (1) (2) (3) (4) 1 1. 2 E-mail A E-mail B E-mail SMTP(Simple Mail Transfer

More information

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复 获取将导致上次获取的 access_token 失效 接入方可以使用 AppID 和 AppSecret

More information

untitled

untitled A, 3+A printf( ABCDEF ) 3+ printf( ABCDEF ) 2.1 C++ main main main) * ( ) ( ) [ ].* ->* ()[] [][] ** *& char (f)(int); ( ) (f) (f) f (int) f int char f char f(int) (f) char (*f)(int); (*f) (int) (

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

华恒家庭网关方案

华恒家庭网关方案 LINUX V1.5 1 2 1 2 LINUX WINDOWS PC VC LINUX WINDOWS LINUX 90% GUI LINUX C 3 REDHAT 9 LINUX PC TFTP/NFS http://www.hhcn.com/chinese/embedlinux-res.html minicom NFS mount C HHARM9-EDU 1 LINUX HHARM9-EDU

More information

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes Java application Java main applet Web applet Runnable Thread CPU Thread 1 Thread 2 Thread 3 CUP Thread 1 Thread 2 Thread 3 ,,. (new) Thread (runnable) start( ) CPU (running) run ( ) blocked CPU sleep(

More information

Microsoft Word - linux命令及建议.doc

Microsoft Word - linux命令及建议.doc Linux 操 作 系 统 命 令 集 1 基 本 命 令 查 看 系 统 信 息 : uname -a 修 改 密 码 : passwd 退 出 : logout(exit) 获 取 帮 助 : man commands 2 文 件 和 目 录 命 令 显 示 当 前 工 作 目 录 : pwd 改 变 所 在 目 录 : cd cd - 切 换 到 上 一 次 使 用 的 目 录 cd 切 换

More information

W. Richard Stevens UNIX Sockets API echo Sockets TCP OOB IO C struct C/C++ UNIX fork() select(2)/poll(2)/epoll(4) IO IO CPU 100% libevent UNIX CPU IO

W. Richard Stevens UNIX Sockets API echo Sockets TCP OOB IO C struct C/C++ UNIX fork() select(2)/poll(2)/epoll(4) IO IO CPU 100% libevent UNIX CPU IO Linux muduo C++ (giantchen@gmail.com) 2012-09-30 C++ TCP C++ x86-64 Linux TCP one loop per thread Linux native muduo C++ IT 5 C++ muduo 2 C++ C++ Primer 4 W. Richard Stevens UNIX Sockets API echo Sockets

More information

Microsoft Word - 实用案例.doc

Microsoft Word - 实用案例.doc 计 算 机 系 统 应 用 2009 年 第 12 期 嵌 入 式 Linux 下 温 湿 度 传 感 器 的 设 计 与 实 现 1 Design and Implementation of Temperature and Humidity Sensor Based on Embedded Linux 陈 博 刘 锦 高 ( 华 东 师 范 大 学 电 子 科 学 技 术 系 上 海 200241)

More information

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1 21 , 7, Windows,,,, : 010-62782989 13501256678 13801310933,,,, ;,, ( CIP) /,,. : ;, 2005. 11 ( 21 ) ISBN 7-81082 - 634-4... - : -. TP316-44 CIP ( 2005) 123583 : : : : 100084 : 010-62776969 : 100044 : 010-51686414

More information

上 述 的 描 述 是 在 一 台 计 算 机 上 只 有 一 颗 CPU, 并 且 该 CPU 只 有 一 个 核 心 的 情 形, 在 这 种 环 境 下, 虽 然 系 统 可 以 运 行 多 个 任 务, 但 是 在 某 一 个 时 间 点,CPU 只 能 执 行 一 个 进 程 但 是 如

上 述 的 描 述 是 在 一 台 计 算 机 上 只 有 一 颗 CPU, 并 且 该 CPU 只 有 一 个 核 心 的 情 形, 在 这 种 环 境 下, 虽 然 系 统 可 以 运 行 多 个 任 务, 但 是 在 某 一 个 时 间 点,CPU 只 能 执 行 一 个 进 程 但 是 如 Linux 操 作 系 统 第 五 讲 : 进 程 管 理 学 时 计 划 :4 学 时 理 论,0 学 时 实 验 ( 无 实 验 教 学 内 容 ) 教 学 大 纲 : 1 进 程 2 进 程 的 监 控 3 进 程 管 理 4 /PROC 文 件 系 统 5 讨 论 与 思 考 Linux 的 进 程 管 理 与 UNIX 操 作 系 统 有 着 很 多 共 同 点, 但 也 有 一 些 独

More information

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit 6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C51 6.1 C51 6.1.1 C51 C51 ANSI C MCS-51 C51 ANSI C C51 6.1 6.1 C51 bit Byte bit sbit 1 0 1 unsigned char 8 1 0 255 Signed char 8 11 128

More information

2007

2007 2007 年 上 半 年 软 件 评 测 师 考 试 浅 析 作 者 : 陈 嘉 祥 方 耀 公 司 : 广 东 亿 迅 科 技 有 限 公 司 ( 质 量 管 理 部 ) 1 简 介 1.1 目 的 本 文 章 主 要 介 绍 软 件 评 测 师 考 试 的 范 围 内 容 以 及 其 重 要 性, 还 有 相 关 的 试 题 分 析 1.2 适 用 范 围 有 意 参 与 或 将 来 有 意 参

More information

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc References (Section 5.2) Hsuan-Tien Lin Deptartment of CSIE, NTU OOP Class, March 15-16, 2010 H.-T. Lin (NTU CSIE) References OOP 03/15-16/2010 0 / 22 Fun Time (1) What happens in memory? 1 i n t i ; 2

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

1 CPU interrupt INT trap CPU exception

1 CPU interrupt INT trap CPU exception 1 CPU interrupt INT trap CPU exception 2 X86 CPU gate 64 16 1 2 5 8 16 16 P DPL 00101 TSS 101 DPL P 1 64 16 1 2 1 1 3 3 5 16 16 16 P DPL 0 D 000 16 110 111 100 D 1=32 0=16 DPL P 1 INT DPL1>=CPL>=DPL CPU

More information

C/C++ - 文件IO

C/C++ - 文件IO C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;

More information

概述

概述 OPC Version 1.6 build 0910 KOSRDK Knight OPC Server Rapid Development Toolkits Knight Workgroup, eehoo Technology 2002-9 OPC 1...4 2 API...5 2.1...5 2.2...5 2.2.1 KOS_Init...5 2.2.2 KOS_InitB...5 2.2.3

More information

1

1 1 2 3 4 5 GNUDebugger 6 7 void main(int argc, char **argv){ vulncpy(argv[1]); return; } void vulncpy(char *a){ char buf[30]; strcpy(buf, a); return; } *argv[1] buf Shellcode *argv[1]... &buf &buf 8 strcpy

More information

C/C++ - 函数

C/C++ - 函数 C/C++ Table of contents 1. 2. 3. & 4. 5. 1 2 3 # include # define SIZE 50 int main ( void ) { float list [ SIZE ]; readlist (list, SIZE ); sort (list, SIZE ); average (list, SIZE ); bargragh

More information

并行计算

并行计算 OpenMP OpenMP OpenMP OpenMP OpenMP MPI OpenMP OpenMP 2006-10-9 2 OpenMP ( ) OpenMP RedHat Linux Intel C OpenMP 2006-10-9 3 OpenMP OpenMP OpenMP OpenMP 2006-10-9 4 RedHat Linux Intel C root intel8.1 chmod

More information

穨control.PDF

穨control.PDF TCP congestion control yhmiu Outline Congestion control algorithms Purpose of RFC2581 Purpose of RFC2582 TCP SS-DR 1998 TCP Extensions RFC1072 1988 SACK RFC2018 1996 FACK 1996 Rate-Halving 1997 OldTahoe

More information

第一章 概论

第一章  概论 1 2 3 4 5 6 7 8 Linux 7.1 7.1.1 1 1 2 3 2 3 1 2 3 3 1 2 3 7.1.2 1 2 1 2 3 4 5 7.1.3 1 1 2 3 2 7.1 3 7.1.4 1 1 PCB 2 3 2 PCB PCB PCB PCB PCB 4 1 2 PSW 3 CPU CPU 4 PCB PCB CPU PCB PCB PCB PCB PCB PCB PCB

More information

C/C++ - 字符串与字符串函数

C/C++ - 字符串与字符串函数 C/C++ Table of contents 1. 2. 3. 4. 1 char C 2 char greeting [50] = " How " " are " " you?"; char greeting [50] = " How are you?"; 3 printf ("\" Ready, go!\" exclaimed John."); " Ready, go!" exclaimed

More information

untitled

untitled 3 C++ 3.1 3.2 3.3 3.4 new delete 3.5 this 3.6 3.7 3.1 3.1 class struct union struct union C class C++ C++ 3.1 3.1 #include struct STRING { typedef char *CHARPTR; // CHARPTR s; // int strlen(

More information

考 試 日 期 :2016/04/24 教 室 名 稱 :602 電 腦 教 室 考 試 時 間 :09:50 25 26 27 28 29 30 31 32 33 34 35 36 二 技 企 管 一 胡 宗 兒 中 文 輸 入 四 技 企 四 甲 林 姿 瑄 中 文 輸 入 二 技 企 管 一

考 試 日 期 :2016/04/24 教 室 名 稱 :602 電 腦 教 室 考 試 時 間 :09:50 25 26 27 28 29 30 31 32 33 34 35 36 二 技 企 管 一 胡 宗 兒 中 文 輸 入 四 技 企 四 甲 林 姿 瑄 中 文 輸 入 二 技 企 管 一 考 試 日 期 :2016/04/24 教 室 名 稱 :602 電 腦 教 室 考 試 時 間 :09:50 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 五 專 企 二 乙 胡 哲 維 中 文 輸 入 五 專 企 二 乙 周 林 昜 中 文 輸 入 五 專 企 二 乙 賴 昱 樺 中 文 輸 入 五 專 企 二 乙

More information

,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far address L10: jmp jmp L20: L10 L20

,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far address L10: jmp jmp L20: L10 L20 (Jump) (Loop) (Conditional jump) CMP CALL AND SAR/SHR TEST JMP NOT SAL/SHL Jnnn* OR RCR/ROR LOOP XOR RCL/ROL RETn * nnn, JNE JL -128 127-32,768 32,767 32K JMP Jnnn (386+) LOOP CALL [Label:] JMP short/near/far

More information

通过Hive将数据写入到ElasticSearch

通过Hive将数据写入到ElasticSearch 我在 使用 Hive 读取 ElasticSearch 中的数据 文章中介绍了如何使用 Hive 读取 ElasticSearch 中的数据, 本文将接着上文继续介绍如何使用 Hive 将数据写入到 ElasticSearch 中 在使用前同样需要加入 elasticsearch-hadoop-2.3.4.jar 依赖, 具体请参见前文介绍 我们先在 Hive 里面建个名为 iteblog 的表,

More information

_汪_文前新ok[3.1].doc

_汪_文前新ok[3.1].doc 普 通 高 校 本 科 计 算 机 专 业 特 色 教 材 精 选 四 川 大 学 计 算 机 学 院 国 家 示 范 性 软 件 学 院 精 品 课 程 基 金 青 年 基 金 资 助 项 目 C 语 言 程 序 设 计 (C99 版 ) 陈 良 银 游 洪 跃 李 旭 伟 主 编 李 志 蜀 唐 宁 九 李 涛 主 审 清 华 大 学 出 版 社 北 京 i 内 容 简 介 本 教 材 面 向

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

PowerPoint Presentation

PowerPoint Presentation 中 小 IT 企 业 人 力 资 源 管 理 咨 询 简 介 一 背 景 分 析 二 需 求 分 析 三 服 务 内 容 四 操 作 流 程 五 斯 隆 优 势 六 行 业 案 例 七 服 务 理 念 目 录 一 背 景 分 析 -IT 业 现 状 分 析 IT 产 业 的 总 量 水 平 较 低 中 国 IT IT 现 状 总 体 规 模 较 小 技 术 自 主 创 新 能 力 差 对 经 济 的

More information

IDEO_HCD_0716

IDEO_HCD_0716 IDEO HCD Toolkit Tencent CDC ...? Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC

More information

<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344>

<4D F736F F D D342DA57CA7DEA447B14D2DA475B57BBB50BADEB27AC3FEB14DA447B8D5C344> 1. 請 問 誰 提 出 積 體 電 路 (IC) 上 可 容 納 的 電 晶 體 數 目, 約 每 隔 24 個 月 (1975 年 更 改 為 18 個 月 ) 便 會 增 加 一 倍, 效 能 也 將 提 升 一 倍, 也 揭 示 了 資 訊 科 技 進 步 的 速 度? (A) 英 特 爾 (Intel) 公 司 創 始 人 戈 登. 摩 爾 (Gordon Moore) (B) 微 軟 (Microsoft)

More information

chp6.ppt

chp6.ppt Java 软 件 设 计 基 础 6. 异 常 处 理 编 程 时 会 遇 到 如 下 三 种 错 误 : 语 法 错 误 (syntax error) 没 有 遵 循 语 言 的 规 则, 出 现 语 法 格 式 上 的 错 误, 可 被 编 译 器 发 现 并 易 于 纠 正 ; 逻 辑 错 误 (logic error) 即 我 们 常 说 的 bug, 意 指 编 写 的 代 码 在 执 行

More information

LOVE IS OVER LOVE LOVE LOVE LOVE IS EVERYTHING LOVE LOVE LOVE LOVER'S QUEEN LYDIA MAYBE TOMORROW MEN'S TALK MY DEAR MY FRIEND MY OH MY MY SUMMER DREAM

LOVE IS OVER LOVE LOVE LOVE LOVE IS EVERYTHING LOVE LOVE LOVE LOVER'S QUEEN LYDIA MAYBE TOMORROW MEN'S TALK MY DEAR MY FRIEND MY OH MY MY SUMMER DREAM 曲名 1234 20.30.40 5678 GOING 929 9907 A BTTER DAY ANDY BABY I'M YOUR MAN BACK HOME BAD BOY BEAUTIFUL GIRL BABY BABY BACK HOME BEAUTIFUL DAY BECAUSE OF YOU BETTER MAN CAN'T STOP LOVING YOU CALL ME CAN YOU

More information

提纲 1 2 OS Examples for 3

提纲 1 2 OS Examples for 3 第 4 章 Threads2( 线程 2) 中国科学技术大学计算机学院 October 28, 2009 提纲 1 2 OS Examples for 3 Outline 1 2 OS Examples for 3 Windows XP Threads I An Windows XP application runs as a seperate process, and each process may

More information

Microsoft Word - 1-3陳詠琳-近代..

Microsoft Word - 1-3陳詠琳-近代.. 近 代 數 字 卦 研 究 考 述 陳 詠 琳 摘 要 所 謂 的 數 字 卦, 乃 指 出 土 文 物 上 某 種 奇 特 的 卜 筮 符 號, 有 學 者 表 示 這 些 符 號 為 數 字, 並 將 之 與 周 易 連 結, 遂 使 此 類 符 號 有 筮 數 易 卦 之 稱, 為 一 門 新 穎 的 易 學 研 究 議 題 張 政 烺 以 奇 數 為 陽, 偶 數 為 陰 的 原 則, 把

More information

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数 复习 类的复用 组合 (composition): has-a 关系 class MyType { public int i; public double d; public char c; public void set(double

More information

Microsoft Word - LJM05.doc

Microsoft Word - LJM05.doc 第 5 章 进程调度与负载均衡 调度工作涉及选择哪个 ( 哪些 ) 任务在哪个 ( 哪些 ) 处理器上运行, 解决各个进程公平地享用 CPU 资源的问题 具体需要确定当前进程可以占用 CPU 核多久 哪个进程将是下一个要运行的进程 负载均衡主要解决的是各个 CPU 忙闲不一的问题, 提高系统的整体吞吐率 调度和负载均衡大体上是与硬件架构无关的, 但是调度相关的进程切换则是体系结构紧密相关的内容 (

More information

C/C++语言 - 分支结构

C/C++语言 - 分支结构 C/C++ Table of contents 1. if 2. if else 3. 4. 5. 6. continue break 7. switch 1 if if i // colddays.c: # include int main ( void ) { const int FREEZING = 0; float temperature ; int cold_ days

More information

untitled

untitled 8086/8088 CIP /. 2004.8 ISBN 7-03-014239-X.... TP313 CIP 2004 086019 16 100717 http://www.sciencep.com * 2004 8 2004 8 1 5 500 787 1092 1/16 16 1/2 391 000 1 2 ii 1 2 CAI CAI 3 To the teacher To the student

More information

内 容 1 2 3 4 培 训 目 标 基 础 知 识 常 用 监 控 命 令 在 实 战 中 综 合 运 用 2

内 容 1 2 3 4 培 训 目 标 基 础 知 识 常 用 监 控 命 令 在 实 战 中 综 合 运 用 2 Linux 常 用 监 控 命 令 介 绍 基 础 应 用 组 梁 若 羽 2011-07-12 1 内 容 1 2 3 4 培 训 目 标 基 础 知 识 常 用 监 控 命 令 在 实 战 中 综 合 运 用 2 培 训 目 标 掌 握 常 用 监 控 命 令 的 用 途 和 启 用 方 法 熟 悉 各 个 关 键 输 出 参 数 的 真 实 含 义 了 解 Linux 操 作 系 统 的 一

More information

untitled

untitled 1 DBF (READDBF.C)... 1 2 (filetest.c)...2 3 (mousetes.c)...3 4 (painttes.c)...5 5 (dirtest.c)...9 6 (list.c)...9 1 dbf (readdbf.c) /* dbf */ #include int rf,k,reclen,addr,*p1; long brec,erec,i,j,recnum,*p2;

More information

untitled

untitled 1 行 行 行 行.NET 行 行 類 來 行 行 Thread 類 行 System.Threading 來 類 Thread 類 (1) public Thread(ThreadStart start ); Name 行 IsAlive 行 行狀 Start 行 行 Suspend 行 Resume 行 行 Thread 類 (2) Sleep 行 CurrentThread 行 ThreadStart

More information

JLX

JLX PRODUCT:LCD MODULE. Model No.: JLX177-006 Product Type: 1.77 inch QVGA TFT Modoule. 产品规格书 晶联讯研发研发部 : Written By Checked By Approved By 客户名称 : 结构电子核准 地址 : 深圳市宝安区西乡宝安大道东华工业区 A3 栋 6 楼电话 :0755-29784961 Http://www.jlxlcd.cn

More information

Microsoft PowerPoint - ds-1.ppt [兼容模式]

Microsoft PowerPoint - ds-1.ppt [兼容模式] http://jwc..edu.cn/jxgl/ HomePage/Default.asp 2 说 明 总 学 时 : 72( 学 时 )= 56( 课 时 )+ 16( 实 验 ) 行 课 时 间 : 第 1 ~14 周 周 学 时 : 平 均 每 周 4 学 时 上 机 安 排 待 定 考 试 时 间 : 课 程 束 第 8 11 12 章 的 内 容 为 自 学 内 容 ; 目 录 中 标 有

More information

学习MSP430单片机推荐参考书

学习MSP430单片机推荐参考书 MSP430 16 MSP430 C MSP430 C MSP430 FLASH 16 1 CPU 16 ALU 16 PC SP SR R4~R15 2 3 00-FFH 100-1FFH 4 5 1 2 51 24 27 6 1 2 3 4 5 6 4 12 SR SP SR CPU SR CPU C Z N GIE CPUOff CPU OscOff SCG0 SCG1 CPU EXIT SP

More information

38 47995529 威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 1059003070 號 39 47995534 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

38 47995529 威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 1059003070 號 39 47995534 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民 1 08414159 惠 鴻 眼 鏡 行 桃 園 市 中 壢 區 福 德 里 中 華 路 一 段 186 號 1 樓 30,000 獨 資 宋 耀 鴻 105/04/27 府 經 登 字 第 1059003866 號 2 17891110 承 元 冷 氣 空 調 工 程 行 桃 園 市 桃 園 區 中 德 里 國 際 路 1 段 98 巷 50 號 2 樓 之 4 200,000 獨 資 詹 安 平

More information

第 一 节 认 识 自 我 的 意 义 一 个 人 只 有 认 识 自 我, 才 能 够 正 确 地 认 识 到 自 己 的 优 劣 势, 找 出 自 己 的 职 业 亮 点, 为 自 己 的 顺 利 求 职 推 波 助 澜 ; 一 个 人 只 有 认 识 自 我, 才 能 在 求 职 中 保 持

第 一 节 认 识 自 我 的 意 义 一 个 人 只 有 认 识 自 我, 才 能 够 正 确 地 认 识 到 自 己 的 优 劣 势, 找 出 自 己 的 职 业 亮 点, 为 自 己 的 顺 利 求 职 推 波 助 澜 ; 一 个 人 只 有 认 识 自 我, 才 能 在 求 职 中 保 持 第 一 篇 知 己 知 彼, 百 战 不 殆 基 本 评 估 篇 第 一 章 认 识 自 我 我 就 是 一 座 金 矿 人 啊, 认 识 你 自 己! 塔 列 斯 ( 希 腊 学 者 ) 要 想 知 道 去 哪 儿, 必 须 先 知 道 你 现 在 在 哪 儿 和 你 是 谁 茜 里 娅. 德 纽 斯 ( 美 国 职 业 指 导 学 家 ) 本 章 提 要 了 解 认 识 自 我 在 职 业 生

More information

Go构建日请求千亿微服务最佳实践的副本

Go构建日请求千亿微服务最佳实践的副本 Go 构建 请求千亿级微服务实践 项超 100+ 700 万 3000 亿 Goroutine & Channel Goroutine Channel Goroutine func gen() chan int { out := make(chan int) go func(){ for i:=0; i

More information

关于建立境内违法互联网站黑名单管理制度的通知

关于建立境内违法互联网站黑名单管理制度的通知 关 于 建 立 境 内 违 法 互 联 网 站 黑 名 单 管 理 制 度 的 通 知 各 省 自 治 区 直 辖 市 和 计 划 单 列 市 通 信 管 理 局 新 闻 办 教 育 厅 ( 教 委 ) 公 安 厅 ( 局 ) 国 家 安 全 厅 ( 局 ) 文 化 厅 ( 局 ) 卫 生 厅 ( 局 ) 工 商 行 政 管 理 局 广 播 影 视 局 新 闻 出 版 局 食 品 药 品 监 督 管

More information

<4D6963726F736F667420576F7264202D20D0C5CFA2BBAFB7A2D5B9D6D8B5E3D7A8CFEEB9E6BBAE2E646F63>

<4D6963726F736F667420576F7264202D20D0C5CFA2BBAFB7A2D5B9D6D8B5E3D7A8CFEEB9E6BBAE2E646F63> 国 民 经 济 和 社 会 发 展 第 十 个 五 年 计 划 信 息 化 发 展 重 点 专 项 规 划 前 言 信 息 化 是 当 今 世 界 科 技 经 济 与 社 会 发 展 的 重 要 趋 势 信 息 技 术 已 广 泛 渗 透 到 经 济 和 社 会 的 各 个 领 域, 推 动 人 类 社 会 生 产 力 达 到 一 个 崭 新 的 高 度 全 球 信 息 化 开 创 了 世 界 经

More information

? 這 全 都 是 市 政 府 提 供 給 我 的 資 料 低 底 盤 公 車 計 畫 96 年 預 算 新 台 幣 4,500 萬 元 97 年 預 算 新 台 幣 1 億 6,500 萬 元 98 年 預 算 新 台 幣 3 億 2,300 萬 元, 共 有 307 台 低 底 盤 公 車,99

? 這 全 都 是 市 政 府 提 供 給 我 的 資 料 低 底 盤 公 車 計 畫 96 年 預 算 新 台 幣 4,500 萬 元 97 年 預 算 新 台 幣 1 億 6,500 萬 元 98 年 預 算 新 台 幣 3 億 2,300 萬 元, 共 有 307 台 低 底 盤 公 車,99 民 政 部 門 質 詢 第 13 組 質 詢 日 期 : 中 華 民 國 98 年 10 月 6 日 質 詢 對 象 : 民 政 部 門 有 關 各 單 位 質 詢 議 員 : 陳 嘉 銘 周 柏 雅 陳 碧 峰 李 文 英 顏 聖 冠 王 孝 維 洪 健 益 計 7 位 時 間 126 分 鐘 速 記 錄 98 年 10 月 6 日 速 記 : 何 采 穎 主 席 ( 李 議 員 慶 元 ): 現

More information

ebook14-4

ebook14-4 4 TINY LL(1) First F o l l o w t o p - d o w n 3 3. 3 backtracking parser predictive parser recursive-descent parsing L L ( 1 ) LL(1) parsing L L ( 1 ) L L ( 1 ) 1 L 2 L 1 L L ( k ) k L L ( 1 ) F i r s

More information

<4D6963726F736F667420576F7264202D20D5FDB7A8D2ABD1DB20BAE7B9E2CEDECFDE20C7B0D1D4D0DEB8C4342E31332E646F63>

<4D6963726F736F667420576F7264202D20D5FDB7A8D2ABD1DB20BAE7B9E2CEDECFDE20C7B0D1D4D0DEB8C4342E31332E646F63> 正 法 耀 眼 虹 光 无 限 成 就 捷 径 九 乘 之 巅 九 乘 次 第 修 法 有 小 乘 和 大 乘 小 乘 指 的 声 闻 乘 和 缘 觉 乘, 大 乘 指 的 显 宗 和 密 宗 显 宗 指 的 是 菩 萨 乘, 也 就 是 波 罗 蜜 乘 ; 密 乘 就 是 密 宗 金 刚 乘, 有 外 密 和 内 密 外 密 有 三 乘 : 事 部 行 部 和 瑜 伽 部 ; 内 密 也 有 三

More information

第5章修改稿

第5章修改稿 (Programming Language), ok,, if then else,(), ()() 5.0 5.0.0, (Variable Declaration) var x : T x, T, x,,,, var x : T P = x, x' : T P P, () var x:t P,,, yz, var x : int x:=2. y := x+z = x, x' : int x' =2

More information

<4D6963726F736F667420576F7264202D20C0CFE6F7A1B6D8FED9CDB5C4B1B3D3B0A1B72E646F63>

<4D6963726F736F667420576F7264202D20C0CFE6F7A1B6D8FED9CDB5C4B1B3D3B0A1B72E646F63> 佝 偻 的 背 影 ( 长 篇 纪 实 文 学 ) 老 骥 着 这 是 一 颗 灵 魂 与 一 段 历 史 的 坦 诚 对 话 这 是 一 个 民 族 被 暴 君 蹂 躏 的 史 实 旁 证 当 阳 谋 已 成 弥 天 笑 料 时, 弥 天 的 罪 行 还 能 掩 盖 多 久 呢? 作 者 题 记 在 历 史 的 法 庭 上, 我 们 将 是 原 告 林 昭 日 头 升 起, 日 头 落 下, 但

More information

多进程管理副本.key

多进程管理副本.key 美妙的多进程管理 造 个类 gunicorn 的轮 blog: xiaorui.cc github: github.com/rfyiamcool 内容 supervisor vs gunicorn vs uwsgi linux 异步信号 孤 进程 vs 僵 进程 daemon 的实现 prefork 是怎么 回事 打造 个较完善的多进程管理轮 怎么写代码 Master Worker elegance

More information

<4D6963726F736F667420576F7264202D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

<4D6963726F736F667420576F7264202D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF> 全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 考 试 2009 年 上 半 年 软 件 设 计 师 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 请 按 下 述 要 求 正 确 填 写 答 题 纸 1. 在 答 题 纸 的 指 定 位 置 填 写 你 所 在 的 省 自 治 区 直 辖 市 计 划 单 列 市 的 名 称 2. 在 答

More information

INTRODUCTION TO COM.DOC

INTRODUCTION TO COM.DOC How About COM & ActiveX Control With Visual C++ 6.0 Author: Curtis CHOU mahler@ms16.hinet.net This document can be freely release and distribute without modify. ACTIVEX CONTROLS... 3 ACTIVEX... 3 MFC ACTIVEX

More information

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F 1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET 2.0 2.0.NET Framework.NET Framework 2.0 ( 3).NET Framework 2.0.NET Framework ( System ) o o o o o o Boxing UnBoxing() o

More information

C语言的应用.PDF

C语言的应用.PDF AVR C 9 1 AVR C IAR C, *.HEX, C,,! C, > 9.1 AVR C MCU,, AVR?! IAR AVR / IAR 32 ALU 1KBytes - 8MBytes (SPM ) 16 MBytes C C *var1, *var2; *var1++ = *--var2; AVR C 9 2 LD R16,-X ST Z+,R16 Auto (local

More information

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C 40 30 10 Project 30 C Project 3 60 Project 40

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C 40 30 10 Project 30 C Project 3 60 Project 40 C C trio@seu.edu.cn C C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C 40 30 10 Project 30 C Project 3 60 Project 40 Week3 C Week5 Week5 Memory & Pointer

More information

改 善 動 機 很 多 人 在 使 用 學 校 網 站 時, 感 覺 到 有 諸 多 不 便, 像 是 雖 然 學 校 有 辦 活 動, 但 很 難 發 現 公 佈 在 網 站 上 的 活 動 資 訊, 還 有 雲 端 系 統 銷 曠 繁 複 等, 鑒 於 以 上 原 因, 我 們 決 定 改 善

改 善 動 機 很 多 人 在 使 用 學 校 網 站 時, 感 覺 到 有 諸 多 不 便, 像 是 雖 然 學 校 有 辦 活 動, 但 很 難 發 現 公 佈 在 網 站 上 的 活 動 資 訊, 還 有 雲 端 系 統 銷 曠 繁 複 等, 鑒 於 以 上 原 因, 我 們 決 定 改 善 創 意 思 考 期 末 報 告 改 善 學 校 網 頁 指 導 老 師 : 蔡 璞 吳 俊 儀 組 員 :49946202 王 鈺 婷 49946215 林 曉 涵 49946233 黃 妍 慈 改 善 動 機 很 多 人 在 使 用 學 校 網 站 時, 感 覺 到 有 諸 多 不 便, 像 是 雖 然 學 校 有 辦 活 動, 但 很 難 發 現 公 佈 在 網 站 上 的 活 動 資 訊, 還

More information

Microsoft Word - ch04三校.doc

Microsoft Word - ch04三校.doc 4-1 4-1-1 (Object) (State) (Behavior) ( ) ( ) ( method) ( properties) ( functions) 4-2 4-1-2 (Message) ( ) ( ) ( ) A B A ( ) ( ) ( YourCar) ( changegear) ( lowergear) 4-1-3 (Class) (Blueprint) 4-3 changegear

More information

内部明电

内部明电 2018 2019 4 2018 8 31 4 2018 2018 44 2018 4 63945 56800 2019 6 2 2018 2018 44 2018 2019 120400 56455 4 63945 63945 56800 3 4 105 3154 2653 5444 4864 7678 6932 3784 3313 674 166 964 684 3208 3101 7849 6335

More information

Microsoft Word - 中耳的主要疾病~中耳炎.doc

Microsoft Word - 中耳的主要疾病~中耳炎.doc 投 稿 類 別 : 生 物 類 篇 名 : 中 耳 的 主 要 疾 病 中 耳 炎 作 者 : 周 譽 積 市 立 大 理 高 中 高 307 班 李 宗 遠 市 立 大 理 高 中 高 307 班 林 岑 聿 市 立 大 理 高 中 高 307 班 指 導 老 師 : 牟 建 明 老 師 - 0 - 壹 前 言 中 耳 的 主 要 疾 病 中 耳 炎 一 研 究 目 的 我 們 常 聽 到 一 些

More information

06 01 action JavaScript action jquery jquery AJAX CSS jquery CSS jquery HTML CSS jquery.css() getter setter.css('backgroundcolor') jquery CSS b

06 01 action JavaScript action jquery jquery AJAX CSS jquery CSS jquery HTML CSS jquery.css() getter setter.css('backgroundcolor') jquery CSS b 06 01 action JavaScript action jquery jquery AJAX 04 4-1 CSS jquery CSS jquery HTML CSS jquery.css() getter setter.css('backgroundcolor') jquery CSS background-color camel-cased DOM backgroundcolor.css()

More information