Tôi muốn viết lại lệnh "cp" của Linux. Vì vậy, chương trình này sẽ hoạt động như #./a.out originalfile copiedfile
. Tôi có thể mở tệp, tạo tệp mới nhưng không thể ghi tệp mới. Không có gì được viết. Điều gì có thể là lý do?Cách ghi tệp bằng C trong Linux?
Mã C hiện nay là:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc,char *aa[]){
int fd,fd1;
char buffer[100];
if(argc!=3){
printf("Usage : ./a.out <original> <copy> \n");
return -1;
}
fd=open(aa[1],O_RDONLY,S_IRUSR);
if(fd==-1){
printf("file not found.\n");
return -1;
}
fd1=open(aa[2],O_CREAT | O_WRONLY,S_IRUSR);
if(fd1!=-1){
printf("file is created.\n");
}
ssize_t n;
while(n=read(fd,buffer,50)){
write(fd1,buffer,n);
printf("..writing..\n");
}
close(fd);
close(fd1);
}
Biến không sử dụng fd2; đừng quên kiểm tra xem viết có viết mọi thứ bạn mong đợi không; không sử dụng các bài tập làm điều kiện (sử dụng GCC -Wall); nó vẫn còn tốt hơn để trả về một giá trị từ main() mặc dù C99 (nhầm lẫn) cho phép bạn rời khỏi return(). Thông báo lỗi của bạn cho fd1 không chính xác; bạn không thoát ra khi nó thất bại trên fd1. Bạn có thể sử dụng sizeof (buffer) trong phần đọc thay vì 50, bằng một nửa kích thước của bộ đệm của bạn. Lỗi được viết theo kiểu cổ điển đối với stderr, chứ không phải stdout. Vòng lặp của bạn chạy vào các vấn đề nếu đọc không thành công (giá trị âm) thay vì trả về không có gì. –
Chỉ cần sao chép và dán mã của bạn vào máy của tôi, được biên dịch bằng gcc và nó hoạt động tốt. – Dipstick
Ồ, điều kỳ diệu đã xảy ra.Vì nhận xét của bạn, tôi đã cố di chuyển tệp đến một địa điểm khác và được kiểm tra lại. Nó hoạt động !!! Cảm ơn bạn rất nhiều. – Devyn