I / O使用系统调用

时间:2014-01-31 17:25:27

标签: c operating-system

我有一个文件bisht.txt和pranav.txt。我想将内容从bisht.txt复制到pranav.txt。 read系统调用工作正常,因为我在它之后打印了str,它打印了文件的确切内容,但是当我检查目标文件pranav.txt的内容时,会写入一些中文但是没有。字符与no相同。写系统调用中提到的字节数。请帮忙!

    #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);
}

1 个答案:

答案 0 :(得分:2)

您没有使用read的返回来写入字节。 read函数返回实际读取的字节数:

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

从技术上讲,写入可能会返回一个短计数,因此您应该在循环中写入所有字节,或者-1表示错误。虽然对于本地存储设备,可能永远不会发生短写。