首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

ubuntu上终端用./带文件名参数程序后write函数返回异常,求解

2012-11-09 
ubuntu下终端用./带文件名参数程序后write函数返回错误,求解系统是ubun12.04,用的是code blocks 10.05.按

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里直接调试带参数的程序时碰到的问题。

代码如下

C/C++ code
#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);}



[解决办法]
while ((n = read(f1, buf, BUFSIZ)) > 0)
write(f1, buf, n);
close(f1);
这个是干什么用的?
[解决办法]
探讨
std::perror("o);pen error code:"

[解决办法]
> while ((n = read(f1, buf, BUFSIZ)) > 0)
> write(f1, buf, n);

write(1, buf, n);

热点排行