File system structure difference between cp and mv linux commands

Indira ramasamy vel.indira at gmail.com
Tue Jun 1 07:43:08 UTC 2010


Hi,

  I am facing one problem only with mv command not with cp command. I have a
test program

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mount.h>
#include <fcntl.h>
#include <errno.h>

int sync_file(char *file)
{
    FILE *fp=NULL;
    int fd;

    printf("file is %s\n",file);
    fp = fopen(file, "r");
    if(!fp)
        return -1;

    fd = fileno(fp);
    fflush(fp);
    fsync(fd);
    ioctl (fd, BLKFLSBUF, 0);
    fclose(fp);
    return 0;

}

int main()
{
    int len=0;
    FILE *fp = NULL;
    char buf[1024];
    char *fname = "/etc/test.conf";
    char fname_tmp[129] = "";


    len = sprintf(buf, "%s\n", "Newly added Line is there");

    snprintf(fname_tmp, 128, "%s.tmp", fname);

    if( (fp = fopen(fname_tmp,"a")) == NULL )
        printf(" ERROR: open(), error - %s\n",strerror(errno));

    fprintf(fp,"%s",buf);
    fflush(fp);

    fsync(fileno(fp));
    fclose(fp);
    system("cp -f /etc/test.conf.tmp /etc/test.conf");
   // system("mv -f /etc/test.conf.tmp /etc/test.conf");
    sync_file(fname);
    return 0;
}

Here i am opening a tmp file for writing. Then i am copying/moving for
original file. Then i do a fflush, fsync(), ioctl() to the original file.
Then i run this binary in linux machine(ext2 file system, 2.6.23.5 kernel)
after that immediately  power off the machine. Then power on machine, the
file is disappeared or written data lost or file gets corrupted if i move
the tmp file to the original file. And there is a no problem if i copy the
tmp file to original file. So i want to know the difference between the cp
and mv command. Can you please give me suggestion on it?

Thanks,
Indira.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/ext3-users/attachments/20100601/1eef65da/attachment.htm>


More information about the Ext3-users mailing list