apue 제6 장 학습 총화
2825 단어 총결산
1. 그림자 파일 과 구령
암호 파일 에서 흔히 볼 수 있 는 필드 는 다음 과 같 습 니 다.
root(用户名):x(加密口令):0(uid):0(gid):root(注释字段):/root(用户所在根目录):/bin/bash(用户的shell所在目录)
메모: 이곳 의 암호 화 암 호 는 단지 자리 잡 는 기호 일 뿐 입 니 다. 진정한 암호 화 암 호 는 그림자 파일 에 저장 되 어 있 습 니 다. 그림자 암호 파일 은 일반 사용자 가 읽 을 수 있 는 것 이 아 닙 니 다.몇몇 프로그램 만 암호 화 암 호 를 액세스 해 야 합 니 다. 예 를 들 어
login(1)
과 passwd(1)
이 프로그램 들 은 사용자 ID 를 루트 로 설정 하 는 프로그램 입 니 다.그림자 암 호 를 사용 하면 일반 파일 /etc/passwd
을 사용자 별로 자 유 롭 게 읽 을 수 있 습 니 다.Liux 에서 다음 코드 는 암호 화 암 호 를 출력 합 니 다 (그림자 암호 파일 에서 끌 어 옵 니 다).
#include "apue.h"
#include <shadow.h>
int main(){
struct spwd *ptr;
if((ptr = getspnam("sysublackbear")) == NULL){
err_sys("getspnam error");
}
printf("sp_pwdp = %s
", ptr->sp_pwdp == NULL || ptr->sp_pwdp[0] == 0 ? "(null)":ptr->sp_pwdp);
return 0;
}
2. 프로그램 을 만 듭 니 다.
uname
을 호출 하고 출력 utsname
구조의 모든 필드 를 출력 합 니 다. 이 출력 을 uname -a
명령 의 출력 결과 와 비교 합 니 다.이 문 제 는 난이도 가 크 지 않 습 니 다. 함수 가 구조 체 를 가리 키 는 지침 에 할당 되 었 을 때 메모리 에 공간 을 분배 하 는 것 을 기억 하 십시오. 그렇지 않 으 면
uname()
함 수 를 호출 할 때 실패 할 수 있 습 니 다.코드 는 다음 과 같 습 니 다:
#include "apue.h"
#include <sys/utsname.h>
int main() {
struct utsname* ptr;
//在调用函数uname时先开辟一块新的空间,如果将指针设为NULL,下面函数不会运行成功,因为系统没有为其开辟内存空间
ptr = (struct utsname*)malloc(sizeof(struct utsname));
int temp;
if(temp = uname(ptr) == -1){
err_sys("uname error");
}
//写成uname -a 的形式
printf("%s %s %s %s %s
",ptr->sysname == NULL ? "(NULL)" : ptr->sysname,
ptr->nodename == NULL ? "(NULL)" : ptr->nodename,
ptr->release == NULL ? "(NULL)" : ptr->release,
ptr->version == NULL ? "(NULL)" : ptr->version,
ptr->machine == NULL ? "(NULL)" : ptr->machine
);
return 0;
}
3. 현재 시간 을 가 져 오 는 프로그램 을 만 들 고
strftime
출력 결 과 를 date
명령 과 유사 한 기본 출력 으로 변환 합 니 다. 환경 변수 TZ 를 다른 값 으로 설정 하고 출력 결 과 를 관찰 합 니 다.코드 는 다음 과 같 습 니 다:
#include "apue.h"
#include <time.h>
int main() {
time_t caltime;
struct tm *tm;
char line[MAXLINE];
//获取当前时间
if((caltime = time(NULL)) == -1){
err_sys("time error");
}
//将当前时间转换为对应的日历时间,存到tm结构体中
if((tm = localtime(&caltime)) == NULL){
err_sys("localtime error");
}
//再将日历时间打印成date的格式
if(strftime(line,MAXLINE,"%a %b %d %X %Z %Y
",tm) == 0){
err_sys("strftime error");
}
//打印字符串(将字符数组输出到stdout流当中)
fputs(line,stdout);
return 0;
}
The End
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
클릭 이벤트의 누적 귀속, 클릭 한 번, 여러 번 실행최근에 업무상 클릭 이벤트가 누적되는 문제에 부딪혔다. 요소에 클릭 이벤트 효과를 추가하지만 항상 효과가 실패한다. 마지막으로 클릭 이벤트가 여러 차례 실행된 것을 발견했다. 인터넷에서 찾아봤는데 다음은 이 문제를 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.