【发布时间】:2022-11-24 00:25:38
【问题描述】:
给定一个 txt 文件,我试图制作一个 C 程序,将其内容复制到另一个名称由参数传递的文件中。该程序必须从源文件中读取 512 字节的块,并将读取的字节写入目标文件中。
我的尝试:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include<fcntl.h>
int main(int argc, char* argv[]){
if(argc < 2){
printf("ERROR: Missing arguments\n");
exit(1);
}
int fdo, fdd;
if((fdo = open(argv[1], O_RDONLY)) == -1){
printf("ERROR: Origin file %s can not be opened\n", argv[1]);
exit(1);
}
if(fdd = open(argv[2], O_CREAT | O_TRUNC, 0666) == -1){
printf("ERROR: Dest. file %s can not be opened\n", argv[2]);
exit(1);
}
char buff[512];
size_t n_bytes;
while((n_bytes = read(fdo,buff,512)) > 0){
if(write(fdd,buff,n_bytes) < 0){
printf("Can not write buffer content in %s \n", argv[2]);
exit(1);
}
}
if(n_bytes < 0){
printf("Can not read %s file \n", argv[1]);
exit(1);
}
close(fdo);
close(fdd);
return 0;
}
文件test.txt的内容为:
abcdef
1890
他们的权限是:
usuarioso@usuarioso-virtualbox:~/Documentos/SO 2022/pr2/API de ficheros y directorios$ ls -l
total 32
-rwxrwxr-x 1 usuarioso usuarioso 17048 nov 23 16:15 copyrf
-rw-rw-r-- 1 usuarioso usuarioso 774 nov 23 16:39 copyrf.c
-rw-rw-r-- 1 usuarioso usuarioso 12 nov 23 16:52 test.txt
但是,当我执行它时,我得到以下信息:
usuarioso@usuarioso-virtualbox:~/Documentos/SO 2022/pr2/API de ficheros y directorios$ gcc -o copyrf copyrf.c
usuarioso@usuarioso-virtualbox:~/Documentos/SO 2022/pr2/API de ficheros y directorios$ ./copyrf test.txt test1.txt
abcdef
1890
usuarioso@usuarioso-virtualbox:~/Documentos/SO 2022/pr2/API de ficheros y directorios$ ls -l
total 28
-rwxrwxr-x 1 usuarioso usuarioso 17008 nov 23 17:00 copyrf
-rw-rw-r-- 1 usuarioso usuarioso 771 nov 23 16:59 copyrf.c
-rw-rw-rw- 1 usuarioso usuarioso 0 nov 23 17:00 test1.txt
-rw-rw-r-- 1 usuarioso usuarioso 12 nov 23 16:52 test.txt
usuarioso@usuarioso-virtualbox:~/Documentos/SO 2022/pr2/API de ficheros y directorios$ cat test1.txt
usuarioso@usuarioso-virtualbox:~/Documentos/SO 2022/pr2/API de ficheros y directorios$
即文件 test1.txt 已创建但为空,文件 test.txt 的内容打印在控制台中。
我错过了什么?
【问题讨论】:
标签: c linux file-descriptor