簡體   English   中英

C 創建文件后程序掛起

[英]C program hangs after creating file

我正在為大學做一個練習,它要求:

創建一個名為“split”的 C 程序,它接受一個文件和一個數字。 該程序會將輸入文件分成兩個文件,一個名為“part1.txt”,其中包含前 n 個字節,另一個名為“part2.txt”,其中包含其他字節。 如果輸入文件包含少於 n 個字節,則不會創建文件“part2.txt”。

這是我的程序。 當我執行它時會發生什么,它創建了 part1.txt 文件(沒有寫入任何內容)並且程序掛起。 我一直在看這個一天,但無法發現問題。 有什么幫助嗎?

我編譯使用:

gcc -o split split.c

當我執行它時,我寫:

./split text.txt 10

其中“text.txt”是一個文本文件,其中包含我通過按鍵盤上的隨機按鈕准確輸入的單詞。

int splitter;
int fd, fd1, fd2;
char buffer[5000];

int main(int argc, char** argv){

if(argc<2){
  printf("Insert 2 arguments.");
  exit(1);
}

splitter = atoi(argv[2]);

if (fd=open(argv[1], O_RDONLY) < 0){
  perror("Error\n");
  exit(1);
} else {
  if (fd1=open("part1.txt", O_RDWR | O_CREAT, S_IRWXU) <0){
    perror("Error");
    exit(1);
  }
  if(read(fd,buffer,splitter) == splitter){
    write(fd1,buffer,splitter);
    if (fd2=open("part2.txt", O_RDWR | O_CREAT, S_IRWXU)<0){
      perror("Errore");
      exit(1);
    };
    while (read(fd,buffer,1) ==1){
      write(fd2,buffer,1);
    }
    close(fd1);
    close(fd2);
  } else {
    while (read(fd,buffer,1) ==1){
      write(fd1,buffer,1);
    }
    close(fd1);
  }
  close(fd);
}

關系運算符位於C的優先級表的6th級,比賦值運算符高得多。

這個說法:

if (fd=open(argv[1], O_RDONLY) < 0)

相當於:

if (fd = (open(argv[1], O_RDONLY) < 0))

<運算符返回10 ,或者換句話說, truefalse ,它們被分配給fd

將其更改為:

if ((fd = open(argv[1], O_RDONLY)) < 0)

您在隨后的if語句中遇到相同的問題。


來自高手C編程:

一些權威建議在 C 中只需要記住兩個優先級:乘法和除法在加法和減法之前。 其他所有內容都應放在括號中。 我們認為這是極好的建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM