linux中C语言写超过2G大小的文件的方法
上一篇 / 下一篇 2007-04-20 02:36:25 / 个人分类:KernBombe
C语言写超过2G大小的文件
#define _FILE_OFFSET_BITS 64
具体含义见:
NAME
fseeko, ftello - seek to or report file position
SYNOPSIS
#include <stdio.h>
int fseeko(FILE *stream, off_t offset, int whence);
off_t ftello(FILE *stream);
DEscrīptION
The fseeko() and ftello() functions are identical to fseek() and ftell() (see fseek(3)), respectively, except
that the offset argument of fseeko() and the return value of ftello() is of type off_t instead of long.
On many architectures both off_t and long are 32-bit types, but compilation with
#define _FILE_OFFSET_BITS 64
will turn off_t into a 64-bit type.
Shell 编程实例集锦
如何远程杀死僵进程?所谓“僵进程”是指处于睡眠中,而且没用的进程。在进行并行计算时经常会有僵进程产生。由于用 top 看不到“僵进程”,所以写了如下一个叫做“rkill”的 shell 文件:
#!/bin/tcsh
echo " Input start number of node: "
set N1="$<"
echo " Input end number of node: "
set N2="$<"
echo " Input the NAME of program"
set pname="$<"
echo "**********************************************************"
while($N1 <= $N2)
set h='t'$N1
set ppid=`rsh $h ps -ef | grep $pname | awk '{print $2}' `
echo "rsh $h kill $ppid"
rsh $h kill $ppid
@ N1++
end
echo "**********************************************************"
如何将一个 index 文件中的空链接删除?在目录 /doc/Art_and_Photos/photo/NASA-Astronomy_Picture_of_the_Day 中只有有限的几个文件,而 archivepix.html 文件中却链接了两千多个文件,我们的目标就是要把不存在的文件链接删除掉。
#!/bin/tcsh -f
# 从当前目录中查找有哪些可用文件。find 不支持正则表达式 \{\}
set tmp=`find . -type f -maxdepth 1 -name "ap[0-9][0-9][0-9][0-9][0-9][0-9].html" `
# 将查找结果 ./ap000303.html 转换为 ap000303.html
set ff1=`echo $tmp | sed -e 's/\.\/\(ap[0-9]\{6\}\.html\)/\1/g' `
# 在文件 archivepix.html 中查找包含类似 ap000303.html 的行,并将其导入临时文件 ftmp 中
grep 'ap[0-9]\{6\}\.html' archivepix.html >ftmp
# 将 ftmp 中的每一行转换为 ap000303.html 的形式,这样 ff1 和 ff2 中的字符串在形式上就是相同的了。
set ff2 = ` sed -e 's/.*\(ap[0-9]\{6\}\.html\).*/\1/g' ftmp`
rm ftmp -f
# 比较变量 ff1 和 ff2 的内容,如果一个字符串只存在于 ff2 中,那么就把文件 archivepix.html 中含有
# 该字符串的行删除掉。
foreach f2 ($ff2)
echo $f2
set flag=0
foreach f1 ($ff1)
if ($f2 == $f1) then
set flag=1
endif
end
if($flag == 0) then
sed -e '/'$f2'/d' archivepix.html >ftmp # 此句最关键之处在于'$f2'可用于正则表达式。
mv ftmp archivepix.html -f
endif
end
如何将一个目录中的所有文件链接到网页中?只要将下列程序的输出导到一个文件中,再将其拷至网页的相应位置就可以了。这里最关键的是看双引号如何输出(\")。
#!/bin/tcsh -f
set dd = "/doc/Art_and_Photos/Flash/flash/AGui"
set ffff = `find $dd -type f `
set n=0
foreach f ($ffff)
@ n++
echo $f
echo '< a href='\"$f\"'<'$n',</a>'>> AGui.html
end
如何为一堆文件换名字?在吴老师的笔记心得中介绍了张林波的高招,但那是 bash 的,而且是以命令行形式给出的。为了便于理解,我将其改写为 tcsh 格式,并将其置于脚本文件之中,更利于使用。
#!/bin/tcsh -f # -f 说明直接运行该文件,而不会先运行 .cshrc 进行初始化
rm tmp_file -f # 确保该文件不存在
foreach fold (*.jpg.*)
set fnew = ` echo $fold | sed -e "s/\.jpg\.\(.*\)/-\1.jpg/g" ` # 精华之处
echo "mv $fold $fnew -f " >>tmp_file
end
chmod a+x tmp_file
./tmp_file
rm tmp_file -f
在这个脚本文件中,关键是“精华之处”。它的意义是:首先将要修改的文件名($fold)通过管道( | ) 传给流编辑器(sed),流编辑器对文件名进行处理,其各项的具体意义为:
set fnew = ` echo $fold | sed -e "s/\.jpg\.\(.*\)/-\1.jpg/g" `
sed -e 命令+选项 表示允许多点编辑
s/re/string/ 用 string 替换正则表达式 re
/\.jpg\.\(.*\)/ “\.”表示一个真正的点,“\.jpg\.” 代表文件名中的“ .jpg.”;
“\(.*\)” 中的‘.’匹配一个非换行符的字符,‘*’匹配 0 个或多个“先前”字符,
它与 shell 的通配符完全不同,shell 的通配符代表 0 个或多个“任意”字符。
“.*”所代表的内容被设为“标签 1”,可在需要的地方用“\1”引用。值得注意
的是:“.*”决不能用“*”来代替,因为“*”将表示任意个“\.”。
/-\1.jpg/ “\1”代表“标签 1”的内容
g 表示行内全面替换
这里还有一个地方需要提醒,那就是将 `echo ...` 引起来的不是单引号,而是键盘左上角标有 “~ ` ”上的撇号.
如何解决网页中字体放大时出现重叠的问题?方案一:适用于单层目录
#!/bin/tcsh -f
set dir=`ls .`
foreach d ($dir)
if( -d $d) then # 判断是否为目录
cd $d
echo "cd $d"
foreach f (*.htm *.html)
sed -e '/[0-9]pt/d' $f > ftmp # 删除所有包含 9pt、12pt 等关键词的行
mv ftmp $f -f
end
cd ..
endif
end
方案二:适用于多层目录
#!/bin/tcsh -f
set SearchPath = "/doc/Reading/everything/武侠/梁羽生"
set files=`find $SearchPath -type f -name "*.htm*" `
foreach f ($files)
echo $f
sed -e '/[0-9]pt/d' $f > ftmp
mv ftmp $f -f
end
如何将一个目录中所有文件名由大写变为小写我们以目录 tmp 为例
1. 进入 tmp 目录的上一级目录
2. zip -r tmp.zip tmp/*
3. mv tmp tmp-old (这是为了安全起见,此处也可改为 rm -r -f tmp )
4. unzip -LL tmp.zip
这样,tmp 目录中的文件名就全改为小写了。在确认无误后,可将 tmp-old 目录删除。
如何将一个文件中的内容由大写变为小写最简单的做法是在 ~/.cshrc 中设如下命令:
alias tr 'tr A-Z a-z< \!* >ttttmp; mv ttttmp \!* -f'
此处别名必须为 tr,其他的就不行,不知为什么。当需要对文件进行操作时,敲如下命令:
tr [filename]
该命令在命令行中运行没有任何问题,但是如果将其放在一个 shell scrīpt 文件中,然后将该文件的属性改为可执行并执行之的话,你会发现用 alias 设置的简化命令全部失效。解决办法为:
source shell_file
此处还顺便说一句,sh 命令运行的是 bash 文件。
如何使系统每隔大约3小时自动激活一次声卡1. 由于我们所用的声卡驱动程序是一个试用版的,在一星期以内,它有3小时的有效时间(尚可接受)。但超过一个星期以后,有效时间就只有20分钟了,那是绝对无法忍受的!吴首教为此感到义愤填膺,于2003年9月1日“坐台”完毕后,组建攻关小组并亲自挂帅,带领组员王某人经过“极其艰苦” 的奋斗,终于攻克了这一难题。短命的攻关小组在完成了其历史使命,并开完“非典声卡激活经验总结表彰大会”后,就地解散。茫茫天地间只留下了如下解决方案:
(1) 建立 shell 脚本文件 opensound
#!/bin/tcsh -f
while(1)
set datesave=`date +%m%d%H%M%Y`
date 082500002003
/usr/lib/oss/soundoff
/usr/lib/oss/soundon
date $datesave
sleep 10800
end
(2) 将 opensound 的属性改为所有人均可执行, 命令为:
chmod a+x opensound
(3) 将 opensound 拷贝至 /usr/local/bin
(4) 在 /etc/rc.d/rc.local 中加入
/usr/local/bin/opensound >&/dev/null&
(5) 重新启动计算机。然后我们就能永远听到美妙的声音啦!!! (此事又一次证明: 道高一尺, 魔高一丈!)
2. 曾经我以为这一问题已圆满解决,但在使用过程中却问题多多,人生最痛苦的事莫过如此。究其原因,都是 soundoff 惹得祸。为了声音永驻,我将不惜 CPU 时间与其试比高。
#!/bin/tcsh -f
set datesave=`date +%m%d%H%M%Y`
date 082500002003
/usr/lib/oss/soundoff
/usr/lib/oss/soundon
date $datesave
sleep 8000 # 以上是为了在系统启动时激活声卡
while(1)
/usr/lib/oss/soundoff >& out
set flag=`cat out`
rm out -f
set N=0
if("$flag" != "") then # flag 不是空串说明 soundoff 执行失败
while(2)
@ N++
/usr/lib/oss/soundoff >& out
set flag=`cat out`
rm out -f
if("$flag" == "") then
echo "soundoff succeed"
break
else
echo "$N soundoff failed"
sleep 5
endif
end
endif
set datesave=`date +%m%d%H%M%Y`
date 082500002003
/usr/lib/oss/soundon
date $datesave
sleep 8000
end
安装方便,使用简易,兼容效果好
ISO光盘里已带有JRE,安装时将自动安装上jre
电驴 / aMule下地址
http://lib.verycd.com/2007/06/26/0000154778.html
#yum update
也可以添加一个软件库:
rpm -Uhv http://apt.sw.be/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
需要说明:
下面所安装的LAMP软件可能官方库没有或不全。
cp /etc/php.ini /etc/php.ini.bak
vi /etc/php.ini
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak
gedit /etc/httpd/conf/httpd.conf
cp /etc/php.ini /etc/php.ini.bak
gedit /etc/php.ini
cp /etc/my.cnf /etc/my.cnf.bak
gedit /etc/my.cnf
delete from mysql.user where user='';
/etc/rc.d/init.d/httpd restart
/etc/rc.d/init.d/mysqld start
chmod 755 /home/aphone/
mkdir /home/aphone/action
mkdir /etc/skel/action
chown aphone.aphone /home/aphone/action
mv /var/www/html /var/www/html.bak
ln -s /home/aphone/action /var/www/html
gedit /etc/httpd/conf.d/exam.conf
Alias /phpmyadmin /home/aphone/begin/phpmyadmin
Alias /phpsysinfo /home/aphone/begin/phpsysinfo
|
相关阅读:
- 有关BIOS (kernbombe, 2007-4-09)
- Bash最常见的激活模式 (kernbombe, 2007-4-20)
- KernBombe安装Nvidia显示驱动 (kernbombe, 2007-7-01)
- KernBombe安装打印机(基于cups平台)(其他linux也适用) (kernbombe, 2007-7-01)
- KernBombe 的快速关机 (kernbombe, 2007-7-01)
- 深入理解C语言指针的奥秘 (kernbombe, 2007-7-01)
- Shell 编程实例集锦 (kernbombe, 2007-7-01)
- 强烈推荐使用永中集成Office 2007作linux办公平台 (kernbombe, 2007-7-03)
- Linux更新工具Yumex&yum揭秘 (kernbombe, 2007-7-05)
- 通过yum安装LAMP (kernbombe, 2007-7-05)
标题搜索
日历
|
|||||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
| 1 | 2 | 3 | 4 | 5 | 6 | ||||
| 7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
| 14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
| 21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
| 28 | 29 | 30 | |||||||
我的存档
数据统计
- 访问量: 89873
- 日志数: 252
- 图片数: 1
- 书签数: 7
- 建立时间: 2007-03-30
- 更新时间: 2008-07-07
