UNIX编程(1)-基础知识
1.登陆名
登陆名放在/etc/passwd口令文件中,口令文件中的登陆项由7个以冒号分隔的字段组成,他们是:登陆名,加密口令,用户ID,用户组ID,注释字段,起始目录,shell程序
daemon:x:2:2:daemon:/sbin:/sbin/nologin
2.文件和目录
例:列出目录中所有的文件
#include "apue.h"#include <dirent.h>intmain(int argc, char *argv[]){DIR*dp;struct dirent*dirp;if (argc != 2)err_quit("usage: ls directory_name");if ((dp = opendir(argv[1])) == NULL)err_sys("can't open %s", argv[1]);while ((dirp = readdir(dp)) != NULL)printf("%s\n", dirp->d_name);closedir(dp);exit(0);}
#include "apue.h"#defineBUFFSIZE4096intmain(void){intn;charbuf[BUFFSIZE];while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0)if (write(STDOUT_FILENO, buf, n) != n)err_sys("write error");if (n < 0)err_sys("read error");exit(0);}
#include "apue.h"intmain(void){intc;while ((c = getc(stdin)) != EOF)if (putc(c, stdout) == EOF)err_sys("output error");if (ferror(stdin))err_sys("input error");exit(0);}
#include "apue.h"intmain(void){printf("hello world from process ID %d\n", getpid());exit(0);}
#include "apue.h"#include <sys/wait.h>intmain(void){charbuf[MAXLINE];/* from apue.h */pid_tpid;intstatus;printf("%% ");/* print prompt (printf requires %% to print %) */while (fgets(buf, MAXLINE, stdin) != NULL) {if (buf[strlen(buf) - 1] == '\n')buf[strlen(buf) - 1] = 0; /* replace newline with null */if ((pid = fork()) < 0) {err_sys("fork error");} else if (pid == 0) {/* child */execlp(buf, buf, (char *)0);err_ret("couldn't execute: %s", buf);exit(127);}/* parent */if ((pid = waitpid(pid, &status, 0)) < 0)err_sys("waitpid error");printf("%% ");}exit(0);}
#include "apue.h"#include <errno.h>intmain(int argc, char *argv[]){fprintf(stderr, "EACCES: %s\n", strerror(EACCES));errno = ENOENT;perror(argv[0]);exit(0);}
#include "apue.h"intmain(void){printf("uid = %d, gid = %d\n", getuid(), getgid());exit(0);}
#include "apue.h"#include <sys/wait.h>static voidsig_int(int);/* our signal-catching function */intmain(void){charbuf[MAXLINE];/* from apue.h */pid_tpid;intstatus;if (signal(SIGINT, sig_int) == SIG_ERR)err_sys("signal error");printf("%% ");/* print prompt (printf requires %% to print %) */while (fgets(buf, MAXLINE, stdin) != NULL) {if (buf[strlen(buf) - 1] == '\n')buf[strlen(buf) - 1] = 0; /* replace newline with null */if ((pid = fork()) < 0) {err_sys("fork error");} else if (pid == 0) {/* child */execlp(buf, buf, (char *)0);err_ret("couldn't execute: %s", buf);exit(127);}/* parent */if ((pid = waitpid(pid, &status, 0)) < 0)err_sys("waitpid error");printf("%% ");}exit(0);}voidsig_int(int signo){printf("interrupt\n%% ");}