#include
static int get_file_size_time(const char *filename) {
struct stat statbuf;
if(stat(filename,&statbuf)==-1) {
printf(\ return(-1); }
if(S_ISDIR(statbuf.st_mode))
return(1);
//exit(1);
if(S_ISREG(statbuf.st_mode))
printf(\
filename,statbuf.st_size,ctime(&statbuf.st_mtime)); }
int main(int argc,char **argv) {
DIR *dirp;
struct dirent *direntp; int stats; if(argc!=2) {
return(0);
}
printf(\exit(1);
if(((stats=get_file_size_time(argv[1]))==0)||(stats==-1))
exit(1);
if((dirp=opendir(argv[1]))==NULL) { }
while((direntp=readdir(dirp))!=NULL)
if(get_file_size_time(direntp- 4。管道文件 Linux提供了许多的过滤和重定向程序,比如more cat 等等.还提供了< > | <<等等重定向操作符.在这些过滤和重 定向程序当中,都用到了管道这种特殊的文件.系统调用pipe可以创建一个管道. #include pipe调用可以创建一个管道(通信缓冲区).当调用成功时,我们可以访问文件描述符fildes[0],fildes[1].其中fildes[0]是用来读的文件描述符,而fildes[1]是用来写的文件描述符. 在实际使用中我们是通过创建一个子进程,然后一个进程写,一个进程读来使用的. 关于进程通信的详细情况请查看进程通信 Printf(\argv[1],strerror(errno)); exit(1); #include #define BUFFER 255 int main(int argc,char **argv) { char buffer[BUFFER+1]; int fd[2]; if(argc!=2) { } if(pipe(fd)!=0) { } if(fork()==0) { close(fd[0]); printf(\fprintf(stderr,\exit(1); fprintf(stderr,\exit(1); } else { } } snprintf(buffer,BUFFER,\write(fd[1],buffer,strlen(buffer)); printf(\exit(0); close(fd[1]); printf(\ memset(buffer,'\\0',BUFFER+1); //Reset the buffer before read read(fd[0],buffer,BUFFER); printf(\exit(1); 为了实现重定向操作,我们需要调用另外一个函数dup2. #include int dup2(int oldfd,int newfd); dup2将用oldfd文件描述符来代替newfd文件描述符,同时关闭newfd文件描述符.也就是说, 所有向newfd操作都转到oldfd上面.下面我们学习一个例子,这个例子将标准输出重定 向到一个文件. #include #include #define BUFFER_SIZE 1024 int main(int argc,char **argv) { int fd; char buffer[BUFFER_SIZE]; if(argc!=2) { } if((fd=open(argv[1],O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR))==-1) { fprintf(stderr,\ fprintf(stderr,\exit(1); Error:%s\\n\\a\ } if(dup2(fd,STDOUT_FILENO)==-1) { fprintf(stderr,\exit(1); Error:%s\\n\\a\ } fprintf(stderr,\ fprintf(stderr,\ while(1) { exit(1);