Я хочу переписать команду «cp» для Linux. Так что эта программа будет работать как #./a.out originalfile copiedfile
. Я могу открыть файл, создать новый файл, но не могу записать новый файл. Ничего не написано. Что может быть причиной?Как написать файл с C в Linux?
текущий код С:
#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);
}
Неиспользованная переменная fd2; не забудьте проверить, что запись пишет все, что вы ожидали; не используйте назначения как условия (используйте GCC -Wall); еще лучше вернуть значение из main(), хотя C99 (по ошибке) позволяет вам оставить возврат с main(). Ваше сообщение об ошибке для fd1 неверно; вы не выходите, если он не работает на fd1. Вы можете использовать sizeof (buffer) в read вместо 50, который равен половине вашего буфера. Ошибки классически записываются в stderr, а не в stdout. Ваша петля сталкивается с проблемами, если чтение не выполняется (отрицательное значение), а не возвращает ничего. –
Просто скопировал и вставил код на мою машину, скомпилированный с помощью gcc, и он отлично работает. – Dipstick
О, случилось что-то чудо.Из-за вашего комментария я попытался переместить файл в другое место и снова проверить. Оно работает!!! Огромное спасибо. – Devyn