[英]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))
<
運算符返回1
或0
,或者換句話說, true
或false
,它們被分配給fd
。
將其更改為:
if ((fd = open(argv[1], O_RDONLY)) < 0)
您在隨后的if
語句中遇到相同的問題。
來自高手C編程:
一些權威建議在 C 中只需要記住兩個優先級:乘法和除法在加法和減法之前。 其他所有內容都應放在括號中。 我們認為這是極好的建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.