Articles of Linux操作系统

调用posix_spawn时closures所有文件句柄

我想使用posix_spawn(…)(或者非常相似的东西)产生一系列进程。 这个函数接受一个posix_spawn_file_actions_ttypes的参数,它允许我指定如何处理打开的文件句柄。 从文档中我可以确定,所有文件都从调用进程inheritance,并根据posix_spawn_file_actions_t结构中的信息进行修改。 我希望所有文件都未被生成的进程打开(stdin,stdout和stderr除外)。 有谁知道如何做到这一点? 显然这可以在一些实现中使用'POSIX_SPAWN_CLOEXEC_DEFAULT'spawn属性标志来完成,但是这在我的平台上是不可用的。 我也可以使用fcntl(…)在打开文件的时候指定'close on exec',但是我觉得这个问题的一个更加本地化的解决scheme是可取的。

在C中使用stdin和select()

我有以下程序: #include <stdio.h> #define STDIN 0 int main() { fd_set fds; int maxfd; // sd is a UDP socket maxfd = (sd > STDIN)?sd:STDIN; while(1){ FD_ZERO(&fds); FD_SET(sd, &fds); FD_SET(STDIN, &fds); select(maxfd+1, &fds, NULL, NULL, NULL); if (FD_ISSET(STDIN, &fds)){ printf("\nUser input – stdin"); } if (FD_ISSET(sd, &fds)){ // socket code } } } 我面对的问题是,一旦在STDIN上检测到input,“用户input – 标准input”信息将继续打印…为什么在循环检查哪些描述符已input时不打印一次? […]

传递一个variables从PHP到bash

我似乎无法得到一个variables传递给我的bash脚本从PHP。 无论我尝试什么,$ uaddress和$ upassword都是空的。 ** ** ** ** ** ** ** ** ** ** bash ** ** ** ** ** ** ** *** #!/bin/bash -x useraddress=$uaddress upassword=$upassword ssh -p 222 -6 2400:8900::f03c:91f:fe69:8af "/var/www/localhost/htdocs/postfixadmin/scripts/postfixadmin-cli mailbox add" $useraddress –password $upassword –password2 $upassword .ssh ** * ** * ** * * php * ** * ** * ** […]

Linux x86_64上的Cassandra启动错误1.2.6

试图从最新的稳定版本在Linux上安装cassandra – http://cassandra.apache.org/download/ – 1.2.6 我已经修改了cassndra.yaml指向一个自定义目录而不是/ var,因为我没有/ var的写权限 我在启动时看到这个错误。 由于发布版似乎相对较新,因此无法在Google上find任何答案。 只是在这里张贴,以防万一我的一个愚蠢的错误。 相同的分配文件在我的macos x86_64机器上正常工作。 INFO 19:24:35,513 Not using multi-threaded compaction java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.xerial.snappy.SnappyLoader.loadNativeLibrary(SnappyLoader.java:322) at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:229) at org.xerial.snappy.Snappy.<clinit>(Snappy.java:48) at org.apache.cassandra.io.compress.SnappyCompressor.create(SnappyCompressor.java:45) at org.apache.cassandra.io.compress.SnappyCompressor.isAvailable(SnappyCompressor.java:55) at org.apache.cassandra.io.compress.SnappyCompressor.<clinit>(SnappyCompressor.java:37) at org.apache.cassandra.config.CFMetaData.<clinit>(CFMetaData.java:82) at org.apache.cassandra.config.KSMetaData.systemKeyspace(KSMetaData.java:81) at org.apache.cassandra.config.DatabaseDescriptor.loadYaml(DatabaseDescriptor.java:468) at org.apache.cassandra.config.DatabaseDescriptor.<clinit>(DatabaseDescriptor.java:123) at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:211) at […]

暂时禁用mysql远程访问

我需要在Linux服务器上进行夜间mysql维护时使远程访问变得无效,以便在这段时间内没有人能够查询数据库。 我不能做SERVICE MYSQL STOP,因为那时我无法做我需要做的事情(截断和重build一对表)。 有没有办法短时间closures外部访问? 提前致谢。

虽然没有任何投入,为什么投票仍在返回?

我写了一个小testing程序来弄清楚如何与poll进行交谈。 我创build了三个文件testa , testb , testc ,并将stringhello\n写入第一个。 所以,这里是我的poll : poll(polls.data(),polls.size(),-1) 根据手册页,超时-1应表明系统调用永远不会超时。 然而,它没有任何东西可以读。 我总是消耗一个字节的input,可以看到你打印的hello\n ,但民意调查并没有停止在那里。 它只是假装在那里有东西要读。 #include <sys/types.h> #include <sys/stat.h> #include <sys/fcntl.h> #include <sys/poll.h> #include <unistd.h> #include <errno.h> #include <vector> #include <map> #include <string> #include <iostream> typedef int fd_t; int main() { fd_t const a = open("testa",O_RDONLY); fd_t const b = open("testb",O_WRONLY); fd_t const c = […]

字符设备捕获多个(int)ioctl参数

我必须编写一个linux char设备,它可以为每个unlock_ioctl处理ioctl(无BKL)函数。 目前,我可以从用户空间ioctl命令收到一个参数 __get_user(myint, (int __user *) arg); 我怎样才能接收多个int参数(例如这个调用)? ioctl(fp, SZ_NEW_DEV_FORMAT, 0, 1, 30);

无法理解Linux内核模块中read_proc的工作

我正在阅读此页面上的内核模块示例 程序中使用的read_proc如下所示: int fortune_read( char *page, char **start, off_t off, int count, int *eof, void *data ) { int len; if (off > 0) { *eof = 1; return 0; } /* Wrap-around */ if (next_fortune >= cookie_index) next_fortune = 0; len = sprintf(page, "%s\n", &cookie_pot[next_fortune]); next_fortune += len; return len; } 有人可以解释为什么off被检查为大于0.此外,有人可以解释什么是closures和计数论证的重要性。 到目前为止,我的理解是,我们必须在页面上写入数据,并且在数据结束时必须设置eof。 谢谢。

如何closureswrite()系统调用的缓冲?

我曾经认为write()系统调用是无缓冲的, fwrite和fread用于缓冲IO。 不过,我写了一些简单的程序来确定在使用write()时仍然有一些缓冲。 我在套接字上使用write()和read() 。 由于缓冲,服务器不停地发送数据包时,客户端可能会滞后。 我不要那个。 我希望客户端必须在服务器发送更多logging之前消耗logging。 我怎样才能做到这一点,而不增加确认等networking负载! 我在linux上使用gcc server.c: #include <stdio.h> #include <errno.h> #include <sys/socket.h> #include <arpa/inet.h> #include <stdio.h> #include <netinet/in.h> #include <string.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <netinet/tcp.h> int remote_rr_port=2000; // Server will send RR logs using connection on this port. char const *remote_server_ip="127.0.0.1"; int connFD_rr; static void startTcpServer(int *sd, […]

获取组合键

如何获得键盘上的按键组合( Ctrl + somekey , Alt + somekey )与Java? 我使用KeyEvent监听器, MouseEvent监听MouseEvent监听键盘上的所有按键。 我可以通过使用该侦听器捕获键盘上的所有关键事件。 但是,我不能抓住( Ctrl + Alt + Del )等键组合。