- 论坛徽章:
- 0
|
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <signal.h>
- #include <pwd.h>
- void sig_handler(int signo);
- int main(int argc, char** argv)
- {
- int ret;
-
- struct passwd* ptr;
- signal(SIGALRM, sig_handler);
- alarm(1);
- for(; ;){
- ptr = getpwnam("xxxx");
- if(ptr == NULL){
- perror("getpwnam");
- exit(1);
- }
- if(strcmp(ptr->pw_name, "xxxx") != 0){
- printf("return value has corrupted by sig_handler, pw_name = %s\n", ptr->pw_name);
- }
- }
- exit(0);
- }
- void sig_handler(int signo)
- {
- struct passwd* root_ptr;
- printf("in sig_handler\n");
- root_ptr = getpwnam("root");
- if(root_ptr == NULL){
- perror("sig_usr getpwnam");
- exit(2);
- }
- printf("pw_name = %s\n", root_ptr->pw_name);
- alarm(1);
- }
复制代码
这是APUE2里程序清单10_2
书上说struct passwd是相关函数里的静态变量,只要调用相关函数,passwd结构的内容就会被重写。
这里,main中的 struct passwd* ptr;和sig_handler中的struct passwd* root_ptr;当两者同时执行getpwnam
的时候,都是指向同一地址吗?应该是吧,当main和sig_handler调用不可重用函数getpwnam的时候重写passwd结构,造成结果的
不确定,不明白的是程序里定义的是两个不同的struct passwd变量啊? |
|