天道酬勤,学无止境

unix

基于 Unix 的系统中的延迟负载等效项(Delay-Load equivalent in unix based systems)

问题 在基于 Unix 的系统中等效延迟负载是多少。 我有一个代码foo.cpp ,在用 gcc 编译时我将它链接到共享对象(总共有三个 .so 文件。)。 每个 .so 文件用于不同的选项。 ./foo -v需要libversion.so ./foo -update需要libupdate.so 我需要这些库的符号应该只在运行时解析。 即使 libupdate.so 库不存在,./ ./foo -v也不应该中断。 它使用延迟加载选项(在 dll 的属性中)在 Windows 中工作。 它在 Unix 系统中的等价物是什么。 -lazy选项在 UNIX 中也一样吗? 如果是这样,在何处包含此选项:在 makefile 中还是使用链接器 ld? 回答1 请参阅您系统上的 dlopen() 参考。 您可以在运行时而不是在链接时手动打开库并解析外部符号。 挖出一个例子: int main(int argc, char **argv) { void *handle=NULL; double (*myfunc)(double); char *err=NULL; handle = dlopen ("/lib/libm.so.1", RTLD_LAZY); if (!handle) { err=dlerror(); perror(err); exit(1); } myfunc = dlsym

2021-11-29 04:55:12    分类:技术分享    c   unix   object   linker   shared

Bash 脚本:读写锁(Bash scripting: reader writer lock)

问题 想象一个由几台 nix 机器组成的网络。 专用节点存储文件并定期调度修改这些文件的Task A 其他每个节点都会调度将这些文件同步 ( rsync ) 到本地存储的Task B Task A可能需要相当长的时间,并且文件集合需要在所有节点上处于一致状态。 因此, Task B不应在Task A运行时运行。 一个可能的解决方案是使用读写锁。 Task A和Task B将分别在资源上放置一个写锁和一个读锁。 我想知道我们如何使用 unix shell 脚本来实现这种锁定机制。 回答1 通常的做法是使用 flock 实用程序,它是 util-linux 包的一部分。 FreeBSD 和 NetBSD 包也可用,aiui,可能还有其他包。 (对于 MacOSX,请参阅此问题。) flock命令可以执行读(“共享”)锁和写(“排他”)锁。 它基于flock(2)系统调用,因此是协作锁定(又名咨询锁定),但在大多数应用程序中都可以正常工作(但请参阅下文了解文件远程的情况)。 上面链接的手册页中有使用示例。 最简单的用例是 flock /tmp/lockfile /usr/local/bin/do_the_update flock /tmp/lockfile -s /usr/local/bin/do_the_rsync 两者都获得了/tmp/lockfile ,然后执行指定的命令

2021-11-29 03:53:29    分类:技术分享    bash   unix   locking

PHP:get_current_user() 与 exec('whoami')(PHP: get_current_user() vs. exec('whoami'))

问题 问题的简短版本: get_current_user();什么区别get_current_user(); 和exec('whoami'); ? 问题的长版: 我在 Mac 上的 XAMPP 本地主机上。 我正在使用 Apache,在 htdocs 文件夹(在某些 Linux+Apache 版本中为 var/www)的文件夹(我们称之为folderxyz )中构建一个基于 PHP 的网站。 我正在玩数据库连接,测试这里描述的 PDO::ERRMODE_EXCEPTION:链接 我收到了这个错误: file_put_contents( PDOErrors.txt ):无法打开流:权限被拒绝... 所以我做了一些调查,似乎要解决这个问题,我需要将文件PDOErrors.txt的CHMOD设置更改为 777。 但是,我的问题是关于其他方面的。 在这个过程中,我发现自己对Apache、PHP、MySQL中user的概念不是很清楚。 PHP手册说get_current_user() “获取当前PHP脚本所有者的名称”链接 PHP 手册说exec('whoami')返回“拥有正在运行的 php/httpd 进程的用户名”链接当我使用get_current_user() ,我得到我的firstnamelastname ,这是我在 Mac 上的帐户名。 当我使用exec('whoami')

2021-11-29 02:52:08    分类:技术分享    php   apache   unix   xampp   chmod

在 FreeBSD 内核模块中读取文本文件的示例(Examples for reading text files in FreeBSD kernel module)

问题 任何人都可以给出一些简单的例子(函数名称很好)来从给定的目录中逐行读取 FreeBSD 内核模块中的文本文件(如果文本真的很难,则二进制是可以的)? 真的很感谢你的帮助。 回答1 这是一个示例内核模块,它将在加载时跟踪您的 /etc/motd: // kernel module motd catter. // Doug Luce doug@forephypodia.con.com #include <sys/param.h> #include <sys/vnode.h> #include <sys/fcntl.h> #include <sys/module.h> #include <sys/kernel.h> #include <sys/namei.h> #include <sys/proc.h> #include <sys/sbuf.h> static int catfile(const char *filename) { struct sbuf *sb; static char buf[128]; struct nameidata nd; off_t ofs; ssize_t resid; int error, flags, len; NDINIT(&nd, LOOKUP, FOLLOW, UIO_SYSSPACE, filename, curthread); flags

2021-11-29 02:46:45    分类:技术分享    unix   filesystems   kernel   freebsd   kernel-module

如何将文件从 ASCII 转换为 UTF-8?(How to convert a file from ASCII to UTF-8?)

问题 我正在尝试将一堆文件从 ASCII 转码为 UTF-8。 为此,我尝试使用iconv : iconv -f US-ASCII -t UTF-8 infile > outfile -f ENCODING输入的编码 -t ENCODING输出的编码 该文件仍然没有转换为 UTF-8。 它是一个 .dat 文件。 在发布之前,我搜索了谷歌并找到了以下信息: ASCII 是 UTF-8 的子集,因此所有 ASCII 文件都已经是 UTF-8 编码的。 ASCII 文件中的字节和“将其编码为 UTF-8”所产生的字节将是完全相同的字节。 他们之间没有区别。 强制编码从 US-ASCII 到 UTF-8 (iconv) 在字符集之间转换文本文件的最佳方法? 上面的链接仍然没有帮助。 即使它是 ASCII,它也会支持 UTF-8,因为 UTF-8 是一个超级集,要从我这里接收文件的另一方需要将文件编码为 UTF-8。 他只需要文件格式为 UTF-8。 请提出任何建议。 回答1 我对这个问题有点困惑,因为正如你所指出的,ASCII 是 UTF-8 的一个子集,所以所有 ASCII 文件都已经是 UTF-8 编码的。 如果您向另一方发送仅包含 ASCII 字符的文件,但另一方抱怨它们不是“UTF-8 编码”,那么我猜他们指的是 ASCII 文件具有没有字节顺序标记明确指示内容是 UTF-8。

2021-11-29 02:31:32    分类:技术分享    linux   unix   encoding   utf-8   ascii

Transpose rows into column in unix

I have input file which is given below Input file 10,9:11/61432568509 118,1:/20130810014023 46,440:4/GTEL 10,9:11/61432568509 118,1:/20130810014023 46,440:4/GTEL Output which i am looking for. 10,9:11/61432568509,118,1:/20130810014023,46,440:4/GTEL 10,9:11/61432568509,118,1:/20130810014023,46,440:4/GTEL I have tried with awk command, but i am not getting desired output. can anyone help me in this? awk -F"" '{a[$1]=a[$1]FS$2}END{for(i in a) print i,a[i]}' inputfile

2021-11-29 01:47:16    分类:问答    linux   unix   awk   solaris   nawk

Merging large number of files into one

I have around 30 K files. I want to merge them into one. I used CAT but I am getting this error. cat *.n3 > merged.n3 -bash: /usr/bin/xargs: Argument list too long How to increase the limit of using the "cat" command? Please help me if there is any iterative method to merge a large number of files.

2021-11-29 01:26:24    分类:问答    macos   bash   unix   cat

What simple mechanism for synchronous Unix pooled processes?

I need to limit the number of processes being executed in parallel. For instance I'd like to execute this psuedo-command line: export POOL_PARALLELISM=4 for i in `seq 100` ; do pool foo -bar & done pool foo -bar # would not complete until the first 100 finished. Therefor despite 101 foos being queued up to run, only 4 would be running at any given time. pool would fork()/exit() and queue the remaining processes until complete. Is there a simple mechanism to do this with Unix tools? at and batch don't apply because they generally invoke on the top of the minute as well as execute jobs

2021-11-29 01:14:34    分类:问答    bash   unix   process   queue   pool

使用 bash:将整数的位表示写入文件(using bash: write bit representation of integer to file)

问题 我有一个包含二进制数据的文件,我需要在某个位置替换几个字节。 我想出了以下内容来将 bash 定向到偏移量并告诉我它找到了我想要的位置: dd bs=1 if=file iseek=24 conv=block cbs=2 | hexdump 现在,使用“文件”作为输出: echo anInteger | dd bs=1 of=hextest.txt oseek=24 conv=block cbs=2 这似乎工作得很好,我可以查看在十六进制编辑器中所做的更改。 问题是,“anInteger”将被写为该整数的 ASCII 表示(这是有道理的),但我需要编写二进制表示。 我想为此使用 bash,并且脚本应该在尽可能多的系统上运行(我不知道目标系统是否会安装 python 或其他任何东西)。 我如何告诉命令将输入​​转换为二进制(可能来自十六进制)? 回答1 printf比echo更便携。 此函数采用十进制整数并输出具有该值的字节: echobyte () { if (( $1 >= 0 && $1 <= 255 )) then printf "\\x$(printf "%x" $1)" else printf "Invalid value\n" >&2 return 1 fi } $ echobyte 97 a $ for i in {0..15}; do echobyte $i

2021-11-29 00:35:03    分类:技术分享    bash   unix   stdout   binaryfiles

给定特定 inode 结构的最大文件大小?(Maximum file size given a particular inode structure?)

问题 假设一个 UNIX 文件系统有一些限制——比如 2 KB 块和 8B 磁盘地址。 如果 inode 包含 13 个直接条目,并且每个条目包含一个单、双和三重间接条目,那么最大文件大小是多少? 回答1 这为您解释: http://www.cis.temple.edu/~ingargio/cis307/readings/stable.html "The maximum size of a file will be 8KB*(10 + 2**10 + 2**20 + 2**30), that is more than 8TB." 将 8KB 交换为 2KB,并针对较小的块大小调整条目。 2KB*(10 + 2**8 + 2**16 + 2**24) 从你的问题中我不清楚这 13 个条目是否包括单打、双打和三重,或者它们是否是分开的,但这应该很容易调整——只需将表达式中的 10 更改为 13。 我想我已经正确地调整了所有的数学......仔细检查它=| 希望这不是我为你做的作业;) 回答2 1 个块中有多少个指针? 每个块是 2kb = 2^11 1 磁盘地址为 8b = 2^3 因此,在 1 个块中有 2^11/2^3 = 2^8 个指针” 文件系统中有多少个指针? 对于 13 个直接条目 = (2^8)*13 = 3328 单人 = (2^8)^2 = 2^16 对于双 = (2

2021-11-29 00:29:47    分类:技术分享    unix   file   system   inode