怎么在linux下的.C文件中添加文件信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么在linux下的.C文件中添加文件信息相关的知识,希望对你有一定的参考价值。

RT,我用GCC编程c和cpp文件,想在用vi创建c或cpp文件时自带文件信息如下:
Filename:(文件名是什么这里就是什么)
Author:zhz
Date:(时间是什么这里就是什么)
Description:(这里空着)
其中上下都以******隔开

参考技术A vi 是文本编辑,它不会自己加内容,需要你手工拍入。
你可以把它们作为注解行:
/* ==================================
Filename:prog.cpp
Author:zhz
Date:2014-07-02
Description:
* ==================================*/
或定义为宏
#define __AUTHOR zhz
#define __Description [.......]

可执行文件,运行时显示 源程序名 和 文件建立时间 可以用 宏:
printf("%s %s\n",__FILE__,__DATE__);
__FILE__ 和 __DATE__ 是 gcc 和 MS VC++ 默认的宏。
参考技术B #!/bin/bash


n=$#
#echo $n

i=1

while (( $i <= n ))

do

        filename=$!i
        #echo $filename
        touch $filename

    echo "Filename:$filename" >>$filename
    echo Author:zhz>>$filename
    echo Date:(时间是什么这里就是什么)>>$filename
    echo Description:(这里空着)>>$filename

    i=`expr $i + 1`

    vim $filename

done

本回答被提问者采纳
参考技术C cat ~/.vimrc
function Mytitle()
call append(0,"/**********************************************")
call append(1,"Filename:".expand("%"))
call append(2,"Author:zhz")
call append(3,"Date:".strftime("%Y-%m-%d %H:%M"))
call append(4,"Description:")
call append(5,"**********************************************/")
endf
map <F4> <Esc>:call Mytitle()<CR><Esc>:$<CR>

只要按F4键,就能自动在文件头添加备注信息

linux:ranlib 似乎没有将任何新信息添加到存档文件中?

【中文标题】linux:ranlib 似乎没有将任何新信息添加到存档文件中?【英文标题】:linux: ranlib doesn't seem to add any new information into an archive file? 【发布时间】:2016-10-03 12:43:31 【问题描述】:

ranlib 的手册页说:

描述 ranlib 生成档案内容的索引并将其存储在档案中。该索引列出了由可重定位目标文件的存档成员定义的每个符号。

好吧,我尝试编译如下存档文件:

$ cat o.c
#include<stdio.h>
int f()
  printf("hello\n");
  return 2;


gcc -o o.o -c o.c
ar rc libmyobject.a o.o
cp libmyobject.a libmyobject.a.keep
ranlib libmyobject.a

我尝试比较ranlib之前和之后的库文件大小,我得到:

-rw-rw-r-- 1 a a   1626 Oct  3 12:03 libmyobject.a.keep
-rw-rw-r-- 1 a a   1626 Oct  3 12:06 libmyobject.a

它们的大小相同。这出乎我的意料。我希望 runlib 将一些额外的信息存储到 .a 文件中。但实际上,文件大小还是一样的。

那么,ranlib 到底做了什么工作,我如何检查 ranlib 做了什么工作呢? 谢谢。

【问题讨论】:

您为什么希望在这种情况下有所改变?在这两种情况下,索引都是相同的——命令的确定性输出是可取的(我相信你遇到了 binutils 的 --enable-deterministic-archives 配置选项) 【参考方案1】:

如果 binutils 使用 --enable-deterministic-archives 编译,则默认情况下,在同一输入源上多次运行 ranlib 将生成相同的输出文件,因为它会将时间戳、uid 和 gid 值归零。

您可以通过传递-U 标志来强制它是非确定性的,这将导致时间戳、uid 和 gid 值的存储,并且因为时间戳会改变文件会有所不同:

$ ranlib -U libmyobject.a
$ diff libm*
Binary files libmyobject.a and libmyobject.a.keep differ

不过,文件 size 将保持不变。

$ ls -l libm*
-rw-r--r-- 1 xx xx 1618 Oct  3 13:58 libmyobject.a
-rw-r--r-- 1 xx xx 1618 Oct  3 13:58 libmyobject.a.keep

请记住,此类工具中的确定性实际上是非常可取的,因为它允许 Reproducible Builds 等功能工作,而无需在构建过程中添加卷积。

【讨论】:

【参考方案2】:

使用现代 GNU 工具,我不知道是否真的可以创建没有索引的存档。 ar 默认创建索引,我没有看到不创建索引的选项,也没有看到任何删除它的命令。

在创建存档后在存档上运行ranlib 是为了让您的构建过程在旧的、更古怪的 UNIX 系统上运行。

【讨论】:

以上是关于怎么在linux下的.C文件中添加文件信息的主要内容,如果未能解决你的问题,请参考以下文章

linux的FHS文件系统目录介绍

怎么用linux中的grep去搜索压缩包下的文件?

.elf格式内容

java jni 怎么在windows环境中编译成linux下的so文件

find命令怎么使用

怎么对C语言中的文件进行内容添加,删除,查找的操作?