Tag: solaris

对solaris的ppoll

这段代码在Linux中编译但不在Solaris中编译,因为显然ppoll()是特定于Linux的(我在Solaris中使用GCC得到了一个未定义的符号错误)。 有任何帮助转换吗? 我不认为只使用poll()是一个好主意,但话说回来,我没有编写这段代码。 (我是用C编写命令行shell的;第一次尝试使用ncurses / C ) #include #include #include #include #include #include #include #include /** VT100 command to clear the screen. Use puts(VT100_CLEAR_SCREEN) to clear * the screen. */ #define VT100_CLEAR_SCREEN “\033[2J” /** VT100 command to reset the cursor to the top left hand corner of the * screen. */ #define VT100_CURSOR_TO_ORIGIN “\033[H” struct […]

父尝试读取子退出状态(或返回值),fork和wait

我糊涂了。 据说,基于man和许多其他来源,如下所示: 当操作系统终止你的进程等待(和状态) 时返回代码应该能让我获得子进程的退出状态或返回值吗? 那两段代码,应该让我看到它的孩子的退出值,然后打印出来。 子进程函数: int childFunction(char in[],char logPath[]){ FILE *logFile= fopen( logPath, “a” ); if(logFile==NULL) return 1; int c=system(in); fclose(logFile); return(c); } 主要: {…some unimportant code before this} result= fork(); if(result==0){ exit(childFunction(inLine,logPath)); } else if(result>0){ int status=0;; int c=(int)waitpid(-1,&status,0); printf(“a:%db:%d\n”,status, WIFEXITED(status)); else return -1; i=0; 我试着等待,睡了一段时间,退出,返回,并阅读手册页几次。 在我对这个function的理解中存在一个基本错误,或者在看了4个小时后我再也看不到它了。 已解决由于某些原因,我绝对不明白,如果你将childFunction中的return(c)更改为if(c!=)return(1);else return(0)它将起作用。 不知道为什么。 已解决2好的,现在我想我知道为什么。 看,似乎返回调用或等待将状态减少到8个最高有效位(256)。 那是什么意思? […]

Solaris 10上更好的内存(堆)管理

我通过Pro * C为嵌入式SQL for Oracle提供了c代码。 每当我进行插入或更新时(下面给出更新示例), update TBL1 set COL1 = :v, . . . where rowid = :v 为了管理批量插入和更新,我已经分配了几个内存块作为批量和提交一次插入。 在必要时,还会有其他内存分配。 如何更好地管理动态内存分配的内存(堆)? 一种选择是在GNU链接时间内配置堆大小。 我使用g ++版本2.95,我知道它是一个相当旧的版本,但必须使用它来传统。 由于可执行文件(在solaris 10上运行),obce内置,可以在具有不同资源的多个生产环境上运行,因此用于堆大小分配的单一大小适合可能不合适。 作为替代方案,需要一些机制,其中堆可以在需要时弹性地生长。 与Linux不同,我认为,Solaris没有过度分配内存的概念。 因此,如果没有剩余空间,则内存分配可能会因ENOMEM而失败。 什么可能是更好的策略,知道我们可以跨越危险级别,现在我们应该释放我们正在存储的块,以防这些是使用或传输内存块到oracle DB完成的情况下,如果这些仍然有待加载,最后解除分配。 您可以建议的任何策略?

为什么关闭套接字不能让select()返回?

在我的程序中,在侦听套接字上有一个线程阻塞,它等待其他连接,代码喜欢这样: { …… FD_ZERO(&fd_sets); FD_SET(sock_fd, &fd_sets); ret_val = select(sock_fd + 1, &fd_sets, NULL, NULL, NULL); if (ret_val > 0) { accept(sock_fd, NULL, NULL); …… } else { …… } 根据我的理解,如果在其他线程中,关闭套接字,代码喜欢这样: { …… shutdown(sock_fd, SHUT_RD); …… } 我认为前一个线程中的select()应该返回。 但经过测试,我发现select()仍处于阻塞状态。 为什么关闭套接字不能让select()返回?

C中的Solaris时区(strftime上缺少%z)

我有一个应用程序写入另一个应用程序,需要提供系统的日期+时区。 我一直在使用带有%z参数的strftime来获取时区,并且它在Linux上运行良好。 然而,上周我们决定将它合并到solaris,以发现%z不存在。 有人建议使用%Z ,它会给出时区名称,但我需要%z给出时区的偏移格式,如+0100或-0300 。 有人有想法吗?

pthread_cancel在solaris下不起作用

#include #include #include #include char a[]=”Hello”; void * thread_body(void * param) { while(1) printf(“%s\n”, param); } int main(int argc, char *argv[]) { pthread_t threadHello; int code; pthread_create(&threadHello, NULL, thread_body, a); pthread_cancel(threadHello); pthread_exit(0); } 当我在Solaris 10(SunOS 5.10)下编译并运行它时,它不会停止。 但在Linux下,它按预期工作。

如何从Solaris系统以C / C ++编程方式获取进程信息?

是否有C / C ++库以及有关如何在Solaris上收集系统和进程信息的文档? 虽然我可以解析命令行工具,但我宁愿使用一个使任务更容易的库。 谢谢 编辑:有人建议使用/ proc虚拟目录来收集信息,但是它比解析命令行工具要好得多,因为我需要为每一段数据实现某种自定义解析需要。 我正在寻找一些针对Windows或MacOS的c库,通过基于c的系统API提供这些信息,但我对谷歌没有好运。

Solaris 11 / Illumos / OmniOS:哪个软件包有/usr/include/sys/types.h?

Ubuntu的等价物是libc6-dev ,但我似乎无法在Solaris上找到它? 如何在Solaris或Illumos上获取用于构建包的types.h和相关文件?

solaris中sockets错误EINPROGRESS的可能原因是什么?

Solaris中的套接字错误EINPROGRESS可能原因是什么? 我们如何检查根本原因? tcp api是:connect

如何在具有big-endian架构的机器上测试代码?

ideone.com和codepad.org都有Little-Endian架构。 我想在Big-Endian架构的某台机器上测试我的代码(例如 – Solaris – 我没有)。 你知道一些简单的方法吗?