|
|
刚开始学习系统编程,希望大家多多指教!
编写cp命令的代码如下:
1 /* cp1.c --version 1 of cp
2 * -uses read and write with tunable buffer size
3 * -usage: cp1 src dest
4 */
5
6 #include<stdio.h>
7 #include<fcntl.h>
8 #include<unistd.h>
9
10 #define BUFFERSIZE 4096
11 #define COPYMODE 0644
12
13 void oops(char*,char*);
14
15 int main(int argc,char *argv[])
16 {
17 int in_fd,out_fd,n_chars;
18 char buf[BUFFERSIZE];
19 if(argc != 3){ //check args
20 fprintf(stderr,"usage: %s source destination\n",*argv);
21 exit(1);
22 }
23 if((in_fd = open(argv[1],O_RDONLY)) == -1)
24 oops("Cannot open",argv[1]);
25
26 if((out_fd = creat(argv[2],COPYMODE)) == -1)
27 oops("Cannot create",argv[2]);
28
29 while((n_chars = read(in_fd,buf,BUFFERSIZE)) > 0){
30 if(write(out_fd,buf,n_chars) != n_chars)
31 oops("write error to",argv[2]);
32 }
33
34 if(n_chars == -1)
35 oops("read error from",argv[1]);
36
37 if(close(in_fd)==-1 || close(out_fd)==-1)
38 oops("error closing file","");
39 }
40
41 void oops(char*s1,char*s2)
42 {
43 fprintf(stderr,"Error: %s",s1);
44 ferror((FILE*)s2);
45 exit(1);
46 }
如果44行的ferror中不用FILE*强制转换的话,就会出现
cp1.c: In function `oops':
cp1.c:44: warning: passing arg 1 of `ferror' from incompatible pointer type
用了FILE*的话虽然不会出现编译的警告,但是执行时不能到预期效果.
例如: #./cp1 xx file
本来应该出现Cannot open xx: NO such file or directory 才对
但是出来的却是Cannot open段错误
是不是因为argv[1]的参数没有传过去?
呵呵!初学,对gdb又不熟,希望大家指点一下,谢谢了`-` |
|