读书人

ubuntu上终端用./带文件名参数程序后w

发布时间: 2012-11-09 10:18:47 作者: rapoo

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);

读书人网 >C语言

热点推荐