2014-01-31 2 views
1

У меня есть файл bisht.txt и pranav.txt. Я хочу скопировать содержимое из файла bisht.txt в pranav.txt. Считываемый системный вызов работает правильно, потому что я напечатал строку сразу после нее, в которой напечатано точное содержимое файла, но когда я проверяю содержимое целевого файла pranav.txt, в него записывается какой-то китайский язык, но нет. символов такие же, как и нет. байтов, упомянутых в системном вызове записи. Пожалуйста помоги!ввода/вывода с использованием системных вызовов

#include<unistd.h> 
    #include<fcntl.h> 
#include<stdio.h> 

main() 
{ 
//FILE Descriptor rdes and wdes 

/*Open file pranav.txt in write-only mode, 
O_CREAT creates file if it does not exist and open bisht.txt in read-only mode*/ 
int rdes = open("bisht.txt",O_RDONLY); 
int wdes = open("pranav.txt", O_CREAT | O_WRONLY); 

char str[10]; 
if(wdes!=-1 && rdes!=-1) 
{ 
    //To read 
    read(rdes,&str,10); 
    //To write on file 
    write(wdes,&str,10); 
} 
else 
{ 
    //Print "error" on screen 
    write(2,"File_Opening_Error",18); 
} 
close(wdes); 
close(rdes); 
} 
+0

У вас есть 10 или меньше байтов в файле bisht.txt? –

+0

Yup, я написал «Бишт» в нем только для тестирования –

ответ

2

Вы не используете возврат из чтения для записи байтов. read функция возвращает количество считанных байт:

int cnt; 
cnt=read(rdes,&str,sizeof(str)); 
if(cnt>0) { write(wdes,&str,cnt); } 

И технически записи может возвращать короткое количество, так что вы должны писать в цикле, пока все байты не были написаны, или -1, который указывает на ошибку. Хотя для локального устройства хранения короткая запись, вероятно, никогда не произойдет.

Смежные вопросы