ubuntu下终端用./带文件名参数程序后write函数返回错误,求解
系统是ubun12.04,用的是code blocks 10.05.
按照K&R的练习8-1写一个程序,这个程序带一个参数,参数为文件名,每次执行会打开参数文件名并输出到屏幕上。里面有read,write函数。
发现一件事,当在终端里输入
程序名 被打印文件名
会正确执行。而把程序名改变后就要输入,
./程序名 被打印文件名
程序会执行,但是write函数就会提示错误。我试过在write执行处添加
if (write(p1, buf, n) != n)
printf("XXXXXX");
会返回XXXXXX
求解,这是怎么一回事,这块unix和c语言很多知识并没有学到呢,所以出现这样的问题,求高手指点。代码在下面。
另外在ubuntan12.04下用code blocks10.05用调试会错误,就是菜单栏里的调试点开始会出现下面的错误
网上有一个帖子有解决办法,但是按照他的办法调试的适合不会弹出屏幕,然后他说的用下面的调试窗口我并不会用。而且调试后无法关闭调试程序。有解决办法的高手可否指点一二。
这个主要是为了要在codeblocks里直接调试带参数的程序时碰到的问题。
代码如下
#include <stdio.h>#include <stdlib.h>#include <fcntl.h>#include <unistd.h>int main(int argc, char *argv[]){ char *prog = argv[0]; char buf[BUFSIZ]; int n, f1; if (argc == 1) while ((n = read(0, buf, BUFSIZ)) > 0) write(1, buf, n); else while (--argc > 0) if ((f1 = open(*++argv, O_RDONLY, 0)) == -1) { fprintf(stderr, "%s: can't open %s\n", prog, *argv); exit(1); }else { while ((n = read(f1, buf, BUFSIZ)) > 0) write(f1, buf, n); close(f1); } if (ferror(stdout)) { fprintf(stderr, "%s:error writing stdout\n", prog); exit(2); } exit(0);}