我正在尝试为Linux编写一个简单的C串行通信程序.我对阻塞/非阻塞读取和VMIN/VTIME关系感到困惑.
我的问题是,如果我应该根据我是否有阻止/非阻塞打开呼叫来设置VMIN/VTIME?
例如,如果我有以下打开电话:
open( "/dev/ttyS0", O_RDWR|O_NONBLOCK|O_NOCTTY)
Run Code Online (Sandbox Code Playgroud)
我应该将VMIN/VTIME设置为:
.c_cc[VTIME] = 0;
.c_cc[VMIN] = 0;
Run Code Online (Sandbox Code Playgroud)
如果我有阻止模式,如:
open( "/dev/ttyS0", O_RDWR|O_NOCTTY)
Run Code Online (Sandbox Code Playgroud)
我应该将VMIN/VTIME设置为:
.c_cc[VTIME] = 0;
.c_cc[VMIN] = 1;
Run Code Online (Sandbox Code Playgroud)
?
即使端口打开标志设置正确,VMIN/VTIME设置为什么也没有任何区别?
如果有人能帮助我理解VMIN/VTIME与阻塞/非阻塞端口之间的关系,我将非常感激.
谢谢
我正在学习如何使用这个 g_variant_new() ,这真的让我很困惑。我已阅读https://developer.gnome.org/glib/unstable/glib-GVariant.html#g-variant-new但我无法轻松理解它。
我有一个代码:
#define MM_DBUS_SERVICE "org.freedesktop.ModemManager1"
#define MM_DBUS_PATH "/org/freedesktop/ModemManager1/Modem/0"
#define MM_DBUS_GET_PROPERTIES "org.freedesktop.DBus.Properties"
....
int i;
GError *error = NULL;
GVariant *ret;
char **paths;
ret = g_dbus_proxy_call_sync (proxy,
"org.freedesktop.DBus.Properties.Get",
g_variant_new ("(ss)",
"org.freedesktop.ModemManager1.Modem",
"SignalQuality"),
G_DBUS_CALL_FLAGS_NONE, -1,
NULL, &error);
if (!ret) {
g_dbus_error_strip_remote_error (error);
g_print ("failed: %s\n", error->message);
g_error_free (error);
return;
}
g_variant_get (ret, "(v)", &paths);
g_variant_unref (ret);
for (i = 0; paths[i]; i++) {
g_print ("Printing \n");
g_print ("%s\n", paths[i]);
}
g_strfreev (paths);
Run Code Online (Sandbox Code Playgroud)
它编译得很好,但是当它运行时我得到了 seg_fault。测试打印
打印分段错误
我期望这次通话的结果是:
dbus-send --system …Run Code Online (Sandbox Code Playgroud) 我正在使用带有片段的抽屉式应用程序。抽屉中的一个选项称为片段,在该片段中,我设置了一个带标签的视图(带有片段)来显示图形。
当我第一次运行该应用程序时,我的选项卡可以正常工作,内容,图形和所有内容都看起来不错。
一旦我单击该片段并转到任何其他片段,然后返回,这些选项卡就会显示正确的标题,但没有内容,也没有任何图形。
这是设置viewpager的主要片段:
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
public class StatsMain extends Fragment {
private ViewPagerAdapter adapter = null;
private TabLayout tabLayout = null;
private ViewPager viewPager = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.stats_main, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
viewPager = (ViewPager) view.findViewById(R.id.viewpager);
tabLayout = (TabLayout) view.findViewById(R.id.tabs);
setupViewPager(viewPager);
tabLayout.setupWithViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager) { …Run Code Online (Sandbox Code Playgroud)