使用open()

时间:2019-04-28 06:29:23

标签: c shell unix

我只需要打开一个文件即可读取并注释写入-仅写入。

有我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main( int argc, char *argv[] ){
   if( argc != 2 ){
      printf( "Naudojimas:\n %s failas_ar_katalogas\n", argv[0] );
      exit( 255 );
   }

   int fd;

   fd = open( argv[1], O_RDONLY );
   if(fd == -1){
      printf("Nepavyko atidaryti skaitymui.\n");
      exit(1);
   }
   else {
      printf( "Failas %s skaitymui atidarytas.\n", argv[1] );
   }

   int fd1;

   fd1 = open( argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0644 );
   if(fd1 == -1){
      printf("Nepavyko atidaryti rasymui.\n");
      exit(1);
   }
   else {
      printf( "Failas %s rasymui atidarytas.\n", argv[2] );
   }

   return 0;
}

如果我只写一个参数,那么我得到的结果是第一个文件成功打开,但是如果我输入两个参数,我就不会输出。

预期结果:在第一个参数中提到的文件以只读方式打开,在第二个参数中提及的文件以只读方式打开(ps,如果没有带第二个参数的文件,则应创建它(如果存在) ,只需从中删除数据即可。)

1 个答案:

答案 0 :(得分:1)

您的argc检查不正确。 argc的值是argv数组中有效元素的数量,其中包括 argv[0]中的“命令”。如果有两个参数,则argc的值为3

这应该很容易看到,主要是因为如果您向程序提供了两个参数,则应该编写有关该程序的错误消息。而且,如果您使用调试器,那么它也应该很明显。