例によってCentOS 6.5
typoによりbad file descriptorが出たりして悲しかった
エラーの詳細(JP1/Advanced Shell固有の場合)
/* cp1.c * cpのバージョン1 uses read and write with tunable buffer size * 使い方 cp1 src test */ #include <stdio.h> #include <unistd.h> #include <fcntl.h> #define BUFFERSIZE 4096 #define COPYMODE 0644 void oops(char *, char *); main(int ac, char *av[]) { int in_fd, out_fd, n_chars; char buf[BUFFERSIZE]; if ( ac != 3 ) { /* 引数チェック */ fprintf( stderr, "usage: %s source destination\n", *av ); exit(1); } /* ファイルをオープンする */ if ( ( in_fd=open(av[1], O_RDONLY)) == -1 ) oops("Cannot open ", av[1]); if ( ( out_fd=creat(av[2], COPYMODE)) == -1 ) oops("Cannot create ", av[2]); /* ファイルをコピーする */ while ( (n_chars = read(in_fd, buf, BUFFERSIZE)) > 0) if (write( out_fd, buf, n_chars ) != n_chars ) oops("Write error to ", av[2]); if ( n_chars == -1 ) oops("Read error from ", av[1]); if ( close(in_fd) == -1 || close(out_fd) == -1 ) oops("Error closing files", ""); } void oops(char *s1, char *s2) { fprintf(stderr, "Error: %s ", s1); perror(s2); exit(1); }