创建像程序一样的猫

时间:2011-11-15 02:15:20

标签: c file-io operating-system posix

我正在尝试编写一个实现一个简单的POSIX cat命令的程序。虽然我编写了代码并且它的默认行为(没有参数)STDIN正常,但对其他人来说效果不佳。谁能帮我这个。这是代码:

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#define BUFFSIZE 10240
#define MAX_FILES 127

int main(int argc, char *argv[])
{
    int n,t,i;
    char buf[BUFFSIZE];
    char *myargv[MAX_FILES];
    //aiparser(argv,myargv);
    if (argc == 1) {
        while(( n = read(STDIN_FILENO,buf,BUFFSIZE)) > 0) {
            if (write(STDOUT_FILENO, buf ,n ) != n) {
                perror("Write Error");
            }
        }
        if ( n < 0 ) {
            perror("Read Error");
        }
    }
    else {
        for ( i = 1; i < argc-1 ; i++) {
            if (strcmp(argv[i],"-") != 0 ) {
                t = open(argv[i],O_RDONLY);
            }
            else {
                t = STDIN_FILENO;
            }
            while(( n = read(t,buf,BUFFSIZE)) > 0) {
                if (write(STDOUT_FILENO, buf ,n ) != n) {
                    perror("Write Error");
                }
            }
            if ( n < 0 ) {
                perror("Read Error");
            }
            if (close(t) == -1) {
                perror("Closing Error");
            }
        }
        }   
    exit(0);
}

1 个答案:

答案 0 :(得分:2)

问题在于:

我&lt;的argc-1

...这意味着如果你只传递一个参数,那么永远不会实际执行循环。