C程序时间戳以hh:mm:ss.xxx毫秒和文件处理问题

时间:2014-11-06 05:47:56

标签: c datetime gps milliseconds

我目前正在做一个关于VANET(车载Ad hoc网络)的研究项目。我正在使用安装了ubuntu 12.及以上版本的4台笔记本电脑。因此,我的GPS以格式(hh:mm:ss.xxx)显示时间戳,其中xxx是毫秒。我已经尝试过使用gettimeofday()和其他日期和时间函数,但似乎都没有给我相同的所需时间格式输出。尽管如此,终端上的命令(日期+“%T。%3N”)给出了我上面提到的确切格式。因为,我需要将此输出保存在外部文件中。我尝试在我的c程序中使用bash脚本。但我无法在主文件中使用文件处理fopen()在文件中打印新行,以在文件中插入新行。

使用此代码。我能够在文件(datebash.csv)中以所需格式打印时间,但问题是我需要使用文件指针从main()向同一文件添加新行。但新行未添加到文件中,并且时间正在datebash.csv文件的同一行中打印。

我的C程序如下:

#include <stdio.h>
#include <stdlib.h>
#include <sys/timeb.h>

#define SHELLSCRIPT "\
#/bin/bash \n\
now=$(date +'%T.%3N') \n\
printf \"$now \" >> datebash.csv \n\
printf \" \" >> datebash.csv \n\
"

    int main()
    {
        int i,a=3,b=3,j;
        FILE *fp;
        puts("Will execute sh with the following script :");
        puts(SHELLSCRIPT);
        puts("Starting now:");
        system(SHELLSCRIPT); // calls the bash script above and runs(SHELLSCRIPT)

        for(i=0;i<300;i++) // just to have a few milliseconds to lapse doing this loop
        { a+b*100;}

        system(SHELLSCRIPT); // calls the bash script again and prints the result in the same file(datebash.csv)

        fp = fopen ("datebash.csv", "a+ ");   // I am opening from here the same file datebash.csv so That I can print a new line to it.
           if(fp==NULL)
            {
                printf("Error!");   
                exit(1); 
            }

        fseek(fp,0,SEEK_END); // placing cursor at end of file to insert new line here
           fprintf(fp ,"\n"); //printing new line

        system(SHELLSCRIPT);***//the problem is here.. the new line is not getting printed in the datebash.csv when the function is called from here. the time is getting printed in the first line itself.***

        return 0;
    }

由于

1 个答案:

答案 0 :(得分:0)

如果我理解,你想写一个带有时间戳的文件,     然后是,     然后是另一个时间戳。     并且您希望通过终端上的date+"%T.%3N生成时间戳。

终端上的

:::

( date +"%T.%3N") >> file.csv  

但是,如果你想编写一个程序来执行此操作(伪代码)

fn = open( "file.csv", O_append, S_iwrite );
check that open was successful, I.E. fn >= 0
if ( 0 <= fn ) // actually, expect fn to be greater than 2
{
    char buffer[30] = {0};

    while(1) 
    {
        read GPS value into buffer
        write ( fn,  buffer,  strlen(buffer)  );
        fflush( fn );
        memset( buffer, 0x00, sizeof buffer );
        strcat( buffer, " ,"); 
        // if the reading of the GPS value is not self pacing, then 
        // use sleep(5); or something similar here
    }
}

你可能想在程序退出时添加一些关闭文件的方法