小编cHa*_*Ham的帖子

从linux终端发送一行邮件

我知道maillinux中有命令通过命令行发送电子邮件.如何从终端发送一行简单的电子邮件?

例如:

mail user@gmail.com [subject] [body]
Run Code Online (Sandbox Code Playgroud)

并且在没有任何确认或提示的情况下发送电子邮件给用户?

原因是,我希望在java程序中发生特定事件时通过电子邮件向我发送简短消息.我的想法是,我将使用Runtime.getRuntime()......等来发送mail command我的java程序.

我过去cron经常做类似的事情,但目前的实现并没有使用cron,所以我需要尝试这样做.

linux email

142
推荐指数
6
解决办法
35万
查看次数

仅在文件不在文件中时才将行添加到文件中

我想添加以下行:

nohup java -jar /mnt/fusion/nfs/labStats/LabInfoAutoLog.jar > /dev/null &
Run Code Online (Sandbox Code Playgroud)

/etc/rc.d/rc.local如果文件尚不存在,则到文件末尾.

我怎么能从linux命令行那样做?我认为grep或sed会工作,但我不熟悉其中任何一个让它工作.现在我使用echo,但这只是一遍又一遍地添加它.

linux grep sed

8
推荐指数
1
解决办法
5715
查看次数

mmap或malloc是否分配RAM?

我知道这可能是一个愚蠢的问题,但我一直在寻找一段时间,但无法找到明确的答案.如果我使用mmap或malloc(在C中,在Linux机器上)任何一个在RAM中分配空间?例如,如果我有2GB的RAM并且想要使用所有可用的RAM,我可以使用malloc/memset组合mmap,或者是否有另一种我不知道的选项?

我想编写一系列可以同时运行的简单程序,并保持进程中使用的所有RAM强制使用交换,并且频繁地交换页面.我已经尝试过以下程序,但这并不是我想要的.它确实分配内存(RAM?),并强制使用交换(如果有足够的实例正在运行),但是当我调用时sleep不会只是锁定内存被使用(因此实际上没有任何内容与其他内容进行交换)过程?),或者我误解了什么.

例如,如果我运行了3次,那么我将使用前两个实例中的2GB(全部)RAM,然后第三个实例会将前两个实例中的一个(RAM)和当前实例交换到RAM中吗?或者实例#3是否只使用磁盘或虚拟内存运行?

这提出了另一点,我是否需要分配足够的内存来使用所有可用的虚拟内存以及要使用的交换分区?

最后,将mmap(或任何其他C函数.地狱,甚至是另一种语言,如果适用)更好地做到这一点?

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 

#define MB(size) ( (size) * 1024 * 1024)
#define GB(size) ( (size) * 1024 * 1024 * 1024)


int main(){
    char *p;
    p = (char *)malloc(MB(512));
    memset(p, 'T', MB(512));
    printf(".5 GB allocated...\n");

    char *q;
    q = (char *)malloc(MB(512));
    memset(q, 'T', MB(512));
    printf("1 GB allocated...\n");
    printf("Sleeping...\n");

    sleep(300);
}
Run Code Online (Sandbox Code Playgroud)

**编辑:我正在为我的操作系统使用CentOS 6.4(带有3.6.0内核),如果这有帮助的话.

c linux memory malloc mmap

8
推荐指数
2
解决办法
7095
查看次数

c指针和数组,将内容复制到另一个数组中

我知道这可能是一个基本问题,但是我从来没有完全掌握过C中的整个指针概念。

我的问题是,说我有一个int数组,并将其传递给类似`

int main(){
    int *a = malloc(sizeof(int*)*4);

    // add values to a
    p(a);
}

void p(int *a){
   int *b = malloc(sizeof(int*)*4)
   b = a;
   // change values in b

   //print a b
}`
Run Code Online (Sandbox Code Playgroud)

什么是正确的方法才能使我对b所做的任何更改都不会影响a中的值?

c arrays pointers

5
推荐指数
1
解决办法
2万
查看次数

如何在后台运行Java代码中的命令行?

我有以下行来运行批处理文件,

Process process = Runtime.getRuntime().exec("cmd /c start rake.bat");
Run Code Online (Sandbox Code Playgroud)

但我希望它在后台运行,而不是向用户显示命令行.如何更改它才能执行此操作?

问题是命令窗口打开并导入程序GUI.我只是希望命令窗口在执行批处理文件时不可见.

java command runtime.exec

4
推荐指数
1
解决办法
1万
查看次数

C语言中的动态结构数组

我试图在C中学习结构,指针和动态数组.我不明白如何使用指针创建动态结构数组.我的代码不起作用,我不知道它有什么问题.我见过几个动态数组的例子,但是没有结构.任何帮助,将不胜感激.请给出一些解释,而不仅仅是代码片段,因为我想要理解的不仅仅是解决这个问题.

#include<stdio.h>
#include<stdlib.h>
#include <string.h>

struct *struct_array;
int i,m,n,p;

struct data
{
    char inputA[20];
    char inputB[20];    
};

struct data get_data()
{
    struct data thisdata;

    printf("Please enter input A\n");
    scanf("%s", thisdata.inputA);

    printf("Please enter input B\n");
    scanf("%s", thisdata.inputB);

    return thisdata;
}

void Output(struct data struct_array, int n)
{
    int index = 0;
    for(i = 0; i<n ;i++)
    {
        printf("%s ", struct_array[i].inputA);
        printf("%s ", struct_array[i].inputB);
    }   
}

void resizeArray(int n)
{
    struct_array = (int*)realloc(n*sizeof(int));
}

void mainMenu()
{
    printf("Please select from the following …
Run Code Online (Sandbox Code Playgroud)

c arrays struct dynamic

4
推荐指数
2
解决办法
2万
查看次数

fork()和"\n"

我刚刚制作了一个简单的演示程序,C看看它是如何fork()工作的,并且遇到了一些我不理解的东西.在这个例子中:

void fork2()
{
    printf("A");
    fork();
    printf("B");
}
Run Code Online (Sandbox Code Playgroud)

输出是ABAB,但在此示例中:

void fork2()
{
    printf("A\n");
    fork();
    printf("B\n");
}
Run Code Online (Sandbox Code Playgroud)

输出是ABB(当然是单独的行).第二个是有道理的,因为如果我理解fork()正确,它会产生一个刚刚发生的新孩子fork()(所以printf("B\n");在这种情况下).我不明白的是,当我包含新行字符时,输出是不同的.

c fork

3
推荐指数
1
解决办法
1336
查看次数

如何使用haskell中的范围,元素之间的距离可变

我启动了以下代码片段,我不确定我的错误在哪里.目标是传入两个值,val并fac输出表单列表[val1, val1*fac,val1*fac*fac...]但不起作用.

 gm :: Int -> Int -> [Int]
 gm val fac = let j=0 in
[ if (x==val) then x else if (x==(val+1)) then k else j 
| x <- [val..], let k = val*fac, let j = fac*k]
Run Code Online (Sandbox Code Playgroud)

例如,如果我打电话给gm 2 3我应该得到结果,[2,6,18,54,162...]但我得到的是[2,6,18,18,18...]

haskell list-comprehension

3
推荐指数
1
解决办法
333
查看次数

将uint8_t [4]转换为uint32_t,然后在C中再次转换

我写了这个测试将a转换uint8[4]为a uint32_t,但是如何将输出转换u32回原来的uint8[4]?我认为它可以通过位移以相同的方式完成,但我不确定如何...

uint32_t u32(uint8_t b[4]){
  uint32_t u;
  u = b[0];
  u = (u  << 8) + b[1];
  u = (u  << 8) + b[2];
  u = (u  << 8) + b[3];
  return u;
}

void p(uint32_t value){
        printf("\nuint32: %u\n",value);
}

int main(){
 uint8_t b[4];
 char a[4] = "test";
 char tmp[32];

 int i;
 for(i=0;i<4;i++){
   b[i] = a[i];
   sprintf(tmp,"%s%u",tmp,b[i]);
 }

 printf("uint8: ");

 for(i=0;i<4;i++)
   printf("%u",b[i]);

uint32_t t2 = u32(b);
 p(t2);
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

c type-conversion

3
推荐指数
2
解决办法
1万
查看次数

如何在 Haskell 中打印自定义数据类型的名称和值

假设我定义了一个数据类型如下:

data OP = Plus | Minus | Num Int     deriving (Show, Eq)
Run Code Online (Sandbox Code Playgroud)

然后我获取 , 的列表strings,并获取它们各自OP值的列表,如下所示:

getOp :: [String] -> [OP]
getOp [] = []
getOp (x:rest)
        | x == "+" = Plus:(getOp rest)
        | isInfixOf "Num" x == True = Num (read (drop 4 x) :: Int):(getOp rest)
        | otherwise = "-" = Minus:(getOp rest)
Run Code Online (Sandbox Code Playgroud)

然后我想显示[OP]列表,用新行分隔。我已经用字符串列表轻松完成了它,但不确定如何处理数据类型列表。

我有以下结构作为起点:

showOp :: [OP] -> String
showOp [] = []
showOp (o:os) = (putStr o):'\n':(showOp os)
Run Code Online (Sandbox Code Playgroud)

我知道最后一行是错误的。我试图 …

haskell types function show

2
推荐指数
1
解决办法
2799
查看次数

C中的循环链表没有给出所需的输出

我想在C中制作一个循环链表,但我遇到了一些麻烦.我很确定这是一个指针问题(我正在学习C和指针是一个弱点).这是代码:

#include <stdio.h>
#include <stdlib.h>
#include "cl.h"

nodeptr add_to_end(nodeptr head, int val)
{
    if (head == NULL)
    {
        nodeptr new_node = (nodeptr)malloc(sizeof(node));
        new_node->data = val;
        new_node->next = NULL;
        return new_node;
    } else {
        head->next = add_to_end(head->next,val);
        return head;
    }
}


void print_piles(nodeptr nodeHead)
{
    if (nodeHead == NULL)
        return;
    printf("%d\n ",nodeHead->data);
    print_piles(nodeHead->next);
}



int main(int argc, char *argv[])
{
    nodeptr head = NULL;
    nodeptr tail = NULL;
    int i = 0;

    head = add_to_end(head,i);
    i++;
    tail = add_to_end(tail,i);
    head->next = …
Run Code Online (Sandbox Code Playgroud)

c pointers linked-list

1
推荐指数
1
解决办法
353
查看次数

向stdout显示单行以更新部分而不是在C中打印新行

是否可以在包含变量的Linux OS上向控制台打印(在C中)一行文本,以便在变量更改时更改打印行而不是打印新行?例如,如果我有以下C代码:

void main()
{
     int i;
     for(i=1;i<=10;i++){
        printf("%d\n",i);
        sleep(5);
     }
}
Run Code Online (Sandbox Code Playgroud)

这样就可以打印十行.但我想打印一行更新自己以显示i它何时发生变化的价值.

c linux stdout

1
推荐指数
2
解决办法
228
查看次数