小编Mik*_*ike的帖子

计算字符串中的特定字符(Java)

我有一个家庭作业来计算字符串中的特定字符.

例如: string = "America"

输出应为= a appear 2 times, m appear 1 time, e appear 1 time, r appear 1 time, i appear 1 time and c appear 1 time

public class switchbobo {

/**
 * @param args
 */     // TODO Auto-generated method stub
  public static void main(String[] args){
    String s = "BUNANA";
    String lower = s.toLowerCase();
    char[] c = lower.toCharArray(); // converting to a char array
    int freq =0, freq2 = 0,freq3 = 0,freq4=0,freq5 = 0;

    for(int i …
Run Code Online (Sandbox Code Playgroud)

java string char histogram

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

是否可以将唯一约束设置为另一个表中的外键?

是否可以将唯一约束设置为另一个表中的外键?如果是的话,你会如何宣布它?

你会如何分配候选人钥匙?可能吗?

示例:我有一个产品表,其中包括:

prod_id, prod_name, prod_price, QOH
Run Code Online (Sandbox Code Playgroud)

我希望prod_name链接到发送表:

desp_id, prod_name, shelfLoc, quantity
Run Code Online (Sandbox Code Playgroud)

我在想的是我可能需要创建一个如下所示的唯一约束:

ALTER TABLE product
ADD CONSTRAINT prod_nameID_uc 
UNIQUE (prod_id,prod_name)
Run Code Online (Sandbox Code Playgroud)

我想知道的是,是否可以在发货表中将唯一密钥称为外键.我必须prod_name而不是prod_id在发货表中,以便信息在阅读时对用户更有意义,而不是看到ID号.我在oracle上使用iSQL plus.

oracle constraints foreign-keys unique

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

如何以编程方式设置我的char设备的权限

我最近在工作中继承了一些代码,这是旧的2.4.X linux内核驱动程序,我的任务是让他们使用更新的内核2.6或更高版本.我正在运行带有3.1.10内核的OpenSUSE 12.1.

我已经从register_chrdev()更新了原始代码以使用class_create()/ device_create()调用,我可以看到我的设备正确显示在/ dev中.我目前的问题是我的设备的权限仅为用户设置为r/w:

crw-------  1 root root    244,   0 Aug  7 07:57 gcanain
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过命令行"chmod"该文件,或者我可以设置udev权限......但无论如何都要以编程方式执行此操作,这样当我发出insmod命令时,dev将以正确的方式安装规则到位了吗?

是否有可能存在的API我可以调用来执行此操作,我在其中一个创建API中缺少任何选项?

只是为了澄清,我不想使用udev规则的部分原因是我不知道设备驱动程序的名称.设备驱动程序在循环中生成,因此名称附加一个数字,nNumDevs几乎可以是任何东西:

for (i = 0; i < nNumDevs; i++) {
  strcpy(Modname,GC_ANAIN_MODULE_NAME);
  strcat(Modname,"%d");
  device_create(c1, NULL, MKDEV(nMajor, GC_ANAIN_MINOR_VERSION+i), NULL, Modname, i);
}
Run Code Online (Sandbox Code Playgroud)

c permissions linux-device-driver

7
推荐指数
2
解决办法
8814
查看次数

使用linux宏access_ok()有什么意义

我一直在做一些研究,我对这个宏有点困惑.希望有人可以给我一些指导.我有一些ioctl代码(我继承了,没有编写),如果access_ok()在继续从用户空间复制数据之前检查是否它会做的第一件事:

#define __lddk_copy_from_user(a,b,c) copy_from_user(a,b,c)
#define __lddk_copy_to_user(a,b,c) copy_to_user(a,b,c)

long can_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
  switch(cmd) {
    case COMMAND:
      if(! access_ok(VERIFY_READ, (void *)arg, sizeof(Message_par_t)))
        return(retval); 

      if(! access_ok(VERIFY_WRITE, (void *)arg, sizeof(Message_par_t)))
        return(retval); 

      argp = &Command;
      __lddk_copy_from_user( (void *) argp,(Command_par_t *) arg, sizeof(Command_par_t));
Run Code Online (Sandbox Code Playgroud)

所以代码工作正常,但我不确定它是否需要.第一个问题来自access_ok的返回描述:

  • 如果该区域可能可访问,则该函数返回非零(尽管访问仍可能导致-EFAULT).此函数只检查地址是否可能在用户空间中,而不是在内核中.

所以这意味着它真的什么都没做,那么确保我们检查的指针可能在用户空间中被初始化了?既然我们知道除了用户空间调用之外我们不能进入这个功能,除非我们为这个设备打开一个有效的文件描述符,否则它不会发生,这真的需要吗?它确实比确保我们没有得到NULL指针更安全吗?

第二个问题来自这个描述:

  • type参数可以指定为VERIFY_READ或VERIFY_WRITE.VERIFY_WRITE符号还标识内存区域是可读还是可写.

这是否意味着我的代码中的第一次检查是多余的?如果我们要检查可写区域,我们可以作为免费赠品阅读吗?

我正在使用x86架构,所以access_ok()和__range_no_ok()的定义来自/usr/src/linux-3.1.10-1.16/arch/x86/include/asm/uaccess.h,如下所示:

#define access_ok(type, addr, size) (likely(__range_not_ok(addr, size) == 0))

#define __range_not_ok(addr, size)                  \
({                                  \
    unsigned long flag, roksum;                 \
    __chk_user_ptr(addr);                       \
    asm("add %3,%1 ; sbb …
Run Code Online (Sandbox Code Playgroud)

c linux macros ioctl linux-kernel

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

实时系统和确定性系统之间是否存在差异?

在工作中,我们正在讨论新平台的设计,其中一个上层管理类型表示它需要运行我们当前的代码库(C on Linux),但需要实时,因为它需要在不到一秒的时间内响应各种输入.我指出:

  1. 这一点并不意味着它需要"实时",因为它需要更快的时钟和更多的中断处理流程
  2. 要考虑的关键点之一是正在使用的操作系统.他们想坚持使用嵌入式Linux,我指出我们需要一个RTOS.由于内核/用户空间内存分裂,使用Linux将阻止"实时",因此I/O通过引入延迟的文件和套接字完成
  3. 我们真正需要确定的是它是否需要确定性(例如,需要在90%的时间内以<200ms响应输入).

真的在我的脑海中,如果第3点是真的,那么它需要是一个实时系统,然后第2点是最大的考虑因素.

我有信心回答,但后来我想到了......别人怎么想?我在这里是正确的轨道还是我错过了什么?

在"实时"系统和"确定性"系统之间我是否有任何不同之处?除了RTC和RTOS之外,我还缺少执行真正实时系统所需的任何主要内容吗?

期待一些伟大的回应!

编辑:

到目前为止得到了一些好的回答,看起来对我的系统和要求有一点好奇,所以我会为感兴趣的人添加一些注意事项:

  1. 我的公司销售数十万的单位,所以我不想在价格上超过杀人
  2. 通常我们销售主处理器板和独立显示器.还有一个其他CAN设备的连接网络.
  3. 电路板(当前)运行设备,还充当网络服务器,为最终用户向显示器发送基本XML文档

这里的要求是管理层希望"快速"(<1s)更新显示,但IMO 的真正限制来自可通过CAN连接的设备.这些设备通常是电机控制设备,其要求包括"必须在小于200ms内响应".

c embedded deterministic real-time definition

7
推荐指数
2
解决办法
2507
查看次数

是否可以在C中打开一个带有线程的新Linux终端?

似乎有很多关于SO的问题很接近,但并不是我正在寻找的.我正在尝试查看是否有办法打开一个新的终端窗口(Linux),使用我的主程序中的线程/子进程,并让该线程/子进程拥有新窗口.

只是对完整目标的概述:我将要有一个主程序,我将启动并将通过输入stdin,如果我选择输入"启动帮助器"它将产生一个新的终端窗口,它本身可以与user(stdin/stdout).

所以我想做的是让主程序调用线程,让线程使用/拥有新的终端窗口,然后当线程消失并死亡时关闭该窗口.

我知道这段代码不能正常工作,但从概念上讲,我喜欢这样的东西:

void * Runit()
{
    system("gnome-terminal"); //Would like to get a handle to this window
    while(1)
      printf("I'm the thread!!!\n"); //Would like to get this printed to the new window
}

int main()
{
    pthread_t child;
    pthread_create(&child, NULL, Runit, NULL);
    sleep(10);
    return 0; //Would like the child & its window to go away now.
}
Run Code Online (Sandbox Code Playgroud)

对此的要求是松散的,它不必是可移植的,这只是一个让我的生活更轻松的Linux工具.它必须是C代码,所以没有shell脚本,除非该脚本可以从C运行.任何帮助甚至其他想法都表示赞赏.

编辑:

我知道在linux终端中有文件句柄/dev/pts/x,我尝试过类似的代码:

system("gnome-terminal");
sleep(2); //let the file handle show up in /dev/pts
fp = fopen("/dev/pts/<new file …
Run Code Online (Sandbox Code Playgroud)

c linux terminal multithreading pthreads

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

实际存储在文件描述符中的信息量是多少?

这可能听起来像一个奇怪的问题,但当我去打开文件时:

int fd;
fd = open("/dev/somedevice", O_RDWR);
Run Code Online (Sandbox Code Playgroud)

我究竟回到了什么地方?我可以看到手册页说:
The open() function shall return a file descriptor for the named file that is the lowest file descriptor not currently open for that process

但是这样吗?它只是一个int或是否在幕后附加了数据?我问的原因是我找到了一些代码(Linux/C),我们从用户空间打开文件:

//User space code:
int fdC;

if ((fdC = open(DEVICE, O_RDWR)) < 0) {
    printf("Error opening device %s (%s)\n", DEVICE, strerror(errno));
    goto error_exit;
}
while (!fQuit) {
    if ((nRet = read(fdC, &rx_message, 1)) > 0) {
Run Code Online (Sandbox Code Playgroud)

然后在内核端,该模块的文件操作(提供fd)映射读取到n_read()函数:

struct file_operations can_fops = { 
    owner:      THIS_MODULE, …
Run Code Online (Sandbox Code Playgroud)

c linux file-descriptor kernel-module linux-kernel

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

我如何知道在Linux上使用哪个串口?

我将在C中编写一个程序,它将通过串口打开连接,并"监听"传入的命令,然后它将采取一些操作并报告状态.

连接将通过RS232(串行端口),我试图了解如何知道打开哪个端口.

使用Windows时,如果我勾了我的USB串行设备之我见"多产的USB转串行通信端口(COM4)",在设备管理器中显示出来......但在Linux中我没有看到任何变化在/sys/class/tty/dev地区,我看到ttyS0ttyS7目前所有的时间(我假设的S基础上代表串行我读过).

那我怎么知道要连接哪一个?

编辑
当我在OpenSUSE 12.1盒子(3.1内核)上开发它时,最终的程序将在运行2.4Linux内核的板上运行uCLinux,所以我正在寻找适用于旧内核的纯C解决方案

FYI:在/sys作为回答注意文件系统这篇文章不存在,直到2.6内核和我受时间限制,我坚持在2.4内核中的东西.

c linux serial-port

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

C睡眠功能不起作用

unistd.h程序中包含睡眠功能时无限期挂起:

#include <stdio.h>
#include <unistd.h>

int main()
{
        int i;
        printf("0 ");
        for(i = 1; i <20; ++i)
        {
            sleep(2);
            printf("%d ", i);
        }
        printf("\n");

        return 0;
}
Run Code Online (Sandbox Code Playgroud)

sleep(2)评论出来时,其余的都运行良好,任何想法?

c sleep unistd.h

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

为什么我应该使用Integer.toString()而不是只打印Integer?

我正在学习Java教程,它让我做了类似的事情:

int k = 5;
System.out.println("The number is " + Integer.toString(k));
Run Code Online (Sandbox Code Playgroud)

就像我跟随的一项好运动一样,但我不禁要问,为什么要使用这种方法呢?看起来像很多额外的打字来获得相同的功能:

int k = 5;
System.out.println("The number is " + k);
Run Code Online (Sandbox Code Playgroud)

是否有充分的理由将该toString()方法用于非字符串数据类型?在我的具体示例中,是否有任何int值不能自动toString?

java integer tostring

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