>gcc first.c -o first.out 数open、read、write、lseek以及close提供了不用缓存的I / O ./testfile.out /root/haoning <unistd.h> getpid(); opendir(ss) 返回DIR 指针 ★进程:f o r k、e x e c和w a i t p i d(e x e c函数有六种变体,但经常把 它们统称为e x e c函数 fgets返回的每一行都以新行符终止,后随一个n u l l字节 调用fork创建一个新进程 ★★★★★代码 #first.c: #include <stdio.h> #include <stdlib.h> int main(void) { printf("ssssss"); exit(0); } ★★★★★★★★★★★ #second.c #include <stdio.h> #include <stdlib.h> #include <dirent.h> int main(int argc,char *argv[]) { DIR *dp; struct dirent *dirp; if(argc!=2) printf("error"); if((dp=opendir(argv[1]))==NULL) printf("errror2"); while((dirp=readdir(dp))!=NULL) printf("%s\n",dirp->d_name); closedir(dp); exit(0); } ./second.out /root/haoning 第一个参数是参数数量,包含命令,第二个参数是命令参数数组指针 ★★★★★★★★ #third.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #define BUFFSIZE 8192 int main(void) { int n; char buf[BUFFSIZE]; while((n=read(STDIN_FILENO,buf,BUFFSIZE))>0) if(write(STDOUT_FILENO,buf,n)!=n) printf("error"); if(n<0) printf("error1"); exit(0); } ./third.out 或者 ./third.out > data ★★★★★★★★★★★★★ #forth.c #include <stdio.h> #include <stdlib.h> int main(void) { int c; while((c=getc(stdin))!=EOF) if(putc(c,stdout)==EOF) printf("error"); if(ferror(stdin)) printf("error2"); exit(0); } 跟上面一样 ★★★★★★★★ #fifth.c #include <stdio.h> #include <stdlib.h> int main(void){ printf("pid:%d\n",getpid()); exit(0); } 注意c#的写法 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 调用系统命令的程序, #seven.c开始不好使 需要加apue.h #include <sys/types.h> #include <sys/wait.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include "apue.h" int main(void) { char buf[MAXLINE]; pid_t pid; int status; printf("%%"); while(fgets(buf,MAXLINE,stdin)!=NULL){ buf[strlen(buf)-1]=0; if((pid=fork())<0)//调用了 printf("fork error"); else if(pid==0){//也调用了 execlp(buf,buf,(char *) 0); exit(127); } if((pid=waitpid(pid,&status,0))<0) printf("waitpid error"); printf("%%"); } exit(0); } seven.c: In function ‘main’: seven.c:8: error: ‘MAXLINE’ undeclared (first use in this function) seven.c:8: error: (Each undeclared identifier is reported only once seven.c:8: error: for each function it appears in.) seven.c:13: warning: incompatible implicit declaration of built-in function ‘strlen 我需要知道,方法都在哪个库里面,查“C语言函数速查.chm” strlen属于string.h 但是MAXLINE在哪???? ★★★★★★★★★★★ ssize_t read(int, void *, size_t); ssize_t write(int, const void *, size_t); pid_t getpid(void); 第三章: lseek函数:"当前文件位移量" od -c file.hole 使用o d ( 1 )命令观察该文件的实际内容。命令行中的- c标志表示以字符方式打印文件内容 #rumen714/third.c #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include "apue.h" char buf1[] ="abcdefghij"; char buf2[]="ABCDEFGHIJ"; int main(void) { int fd; if((fd=creat("file.hole",FILE_MODE))<0) printf("create error"); if(write(fd,buf1,10)!=10) printf("buf1 write error"); if(lseek(fd,40,SEEK_SET)==1) printf("fleek error"); if(write(fd,buf2,10)!=10) printf("buf2 write error"); exit(0); } int =creat(文件名,FILE_MODE); write(int,字符数组,长度); lseek(int,长度,seek_set) ★★★★★★★★★★★★★★★★★★★★★ 当打开一个流时,标准I/O函数fopen返回一个指向FILE对象的指针(struct) 文件描述符:STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO 预定义文件指针:stdin,stdout,stderr, ★★★★★★★★★★★★★★★★★★★★★★★ ★怎么进入另一个线程? ★ ★运行的tomcat,main怎么进入获取tomcat的jndi★ ★★★★★★★★★★★★★★★★★★★★★★★ 全缓存,行缓存,不带缓存 #include <stdio.h> void setbuf(FILE fp*, char *buf) ; int setvbuf(FILE fp,* char *buf, int mode, size_t size) ; _IOFBF 全缓存 _IOLBF 行缓存 _IONBF 不带缓存 强制刷新一个缓存 # include<stdio.h> int fflush(FILEf p*); 打开流: #include <stdio.h> FILE *fopen(const char *pathname, const char *type) ; FILE *freopen(const char *pathname, const char *type, FILE *fp) ; FILE *fdopen(int filedes, const char *type) ;取一个现存的文件描述符(我们可能从open,dup ,dup2 ,fcntl或pipe函数得到此文件描述符) type: r 或r b 为读而打开 w 或w b 使文件成为0长,或为写而创建 a 或a b 添加;为在文件尾写而打开,或为写而创建 r+ 或r+b 或r b + 为读和写而打开 w+ 或w+b 或w b + 使文件为0长,或为读和写而打开 a+ 或a+b 或a b + 为在文件尾读和写而打开或创建 ★一次读一个字符 #include <stdio.h> int getc(FILE fp*) ; 宏,更快 int fgetc(FILE fp*) ; funnctiongetc 函数 int getchar(void); =getc(stdin) #include <stdio.h> int ferror(FILE fp*) ; int feof(FILE fp*) ; 两个函数返回:若条件为真则为非0(真),否则为0(假) void clearerr(FILEf p)* ;) #include <stdio.h> int ungetc(int c, FILE *fp) #include <stdio.h> int putc(int c , FILE *fp); int fputc(int c, FILE *fp); int putchar(int c); =putc(c,stdout) ★每次一行I/O (FILE *fp 可以用stdin) #include <stdio.h> char *fgets(char *buf, int n,FILE *fp) ;(不推荐使用) char *gets(char *buf); #include <stdio.h> int fputs(const char str*, FILE *fp) ; int puts(const char str*) ; 第8章 _ e x i t并不执行标准I / O缓存 的刷新操作